Index: src/libchcore/TWin32ErrorFormatter.cpp =================================================================== diff -u -N -ra6fac511b0dd40e1c18cab086e0bc5ff5d2bc8d7 -r86c2327549cd4fa98972cf9035f9a78451a00f88 --- src/libchcore/TWin32ErrorFormatter.cpp (.../TWin32ErrorFormatter.cpp) (revision a6fac511b0dd40e1c18cab086e0bc5ff5d2bc8d7) +++ src/libchcore/TWin32ErrorFormatter.cpp (.../TWin32ErrorFormatter.cpp) (revision 86c2327549cd4fa98972cf9035f9a78451a00f88) @@ -43,17 +43,18 @@ TString strData; wchar_t* pszBuffer = strData.GetBuffer(dwMaxError); - DWORD dwFlags = FORMAT_MESSAGE_FROM_SYSTEM; - if (hModule) - dwFlags |= FORMAT_MESSAGE_FROM_HMODULE; + DWORD dwPos = 0; + if(hModule) + dwPos = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE, hModule, dwErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), pszBuffer, dwMaxError - 1, NULL); + else + dwPos = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, dwErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), pszBuffer, dwMaxError - 1, NULL); - DWORD dwPos = FormatMessage(dwFlags, hModule, dwErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), pszBuffer, dwMaxError - 1, NULL); if (dwPos == 0xffffffff) { int iPos = 0; if (bUseNumberFallback) iPos = _sntprintf_s(pszBuffer, dwMaxError, _TRUNCATE, _T("ErrorCode: 0x%lx"), dwErrorCode); - strData.ReleaseBufferSetLength(iPos); + strData.ReleaseBufferSetLength(iPos < 0 ? 0 : iPos); } else strData.ReleaseBufferSetLength(std::min(dwPos, dwMaxError - 1));