diff --git a/Core/GameEngine/Source/GameNetwork/GameSpy/Thread/ThreadUtils.cpp b/Core/GameEngine/Source/GameNetwork/GameSpy/Thread/ThreadUtils.cpp index fedf8d86988..99bd44666e2 100644 --- a/Core/GameEngine/Source/GameNetwork/GameSpy/Thread/ThreadUtils.cpp +++ b/Core/GameEngine/Source/GameNetwork/GameSpy/Thread/ThreadUtils.cpp @@ -32,8 +32,14 @@ std::wstring MultiByteToWideCharSingleLine( const char *orig ) { - Int len = strlen(orig); - WideChar *dest = NEW WideChar[len+1]; + // First, get the required buffer size in wide characters + Int len = MultiByteToWideChar(CP_UTF8, 0, orig, -1, NULL, 0); + if (len <= 0) + { + return std::wstring(); + } + + WideChar *dest = NEW WideChar[len]; MultiByteToWideChar(CP_UTF8, 0, orig, -1, dest, len); WideChar *c = NULL; @@ -56,7 +62,7 @@ std::wstring MultiByteToWideCharSingleLine( const char *orig ) } while ( c != NULL ); - dest[len] = 0; + dest[len-1] = 0; std::wstring ret = dest; delete[] dest; return ret;