From c3b57c90d1884afa6ec50c62216fdaaff483d06b Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Sun, 23 Jun 2019 04:35:00 -0400 Subject: refactored FormatMessage() into formatSystemMessage() fixes trying to load a wchar_t* with qCritical(), which merely prints the address --- src/settings.cpp | 61 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 18 deletions(-) (limited to 'src/settings.cpp') diff --git a/src/settings.cpp b/src/settings.cpp index 53dd32dc..b45912d4 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -81,6 +81,38 @@ private: int m_SortRole; }; + +QString formatSystemMessage(DWORD id) +{ + wchar_t* message = nullptr; + + const auto ret = FormatMessageW( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + id, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + reinterpret_cast(&message), + 0, NULL); + + QString s; + const QString idString = QString("0x%1").arg(id, 0, 16); + + if (ret == 0 || !message) { + s = idString; + } else { + s = QString("%1 (%2)") + .arg(QString::fromStdWString(message).trimmed()) + .arg(idString); + } + + LocalFree(message); + + return s; +} + + Settings *Settings::s_Instance = nullptr; @@ -217,12 +249,11 @@ QString Settings::deObfuscate(const QString key) result = QString::fromWCharArray(charData, creds->CredentialBlobSize / sizeof(wchar_t)); CredFree(creds); } else { - if (GetLastError() != ERROR_NOT_FOUND) { - wchar_t buffer[256]; - FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - buffer, (sizeof(buffer) / sizeof(wchar_t)), NULL); - qCritical() << "Retrieving encrypted data failed:" << buffer; + const auto e = GetLastError(); + if (e != ERROR_NOT_FOUND) { + qCritical().nospace() + << "Retrieving encrypted data failed: " + << formatSystemMessage(e); } } delete[] keyData; @@ -366,13 +397,8 @@ bool Settings::getNexusApiKey(QString &apiKey) const bool Settings::setNexusApiKey(const QString& apiKey) { if (!obfuscate("APIKEY", apiKey)) { - wchar_t buffer[256]; - - FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - buffer, (sizeof(buffer) / sizeof(wchar_t)), NULL); - - qCritical() << "Storing API key failed:" << buffer; + const auto e = GetLastError(); + qCritical().nospace() << "Storing API key failed: " << formatSystemMessage(e); return false; } @@ -487,11 +513,10 @@ void Settings::setSteamLogin(QString username, QString password) m_Settings.setValue("Settings/steam_username", username); } if (!obfuscate("steam_password", password)) { - wchar_t buffer[256]; - FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - buffer, (sizeof(buffer) / sizeof(wchar_t)), NULL); - qCritical() << "Storing or deleting password failed:" << buffer; + const auto e = GetLastError(); + qCritical().nospace() + << "Storing or deleting password failed: " + << formatSystemMessage(e); } } -- cgit v1.3.1