From 32b66455859a0bc43ed487fe7e2ca47d5cf81e1c Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Sat, 3 Jan 2026 16:33:34 +0000 Subject: [PATCH] Fix MultiByteToWideChar buffer sizing and allocation --- .../GameNetwork/GameSpy/Thread/ThreadUtils.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) 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;