From ad9303d888aa0b463f07f16059ce801d8da10ea2 Mon Sep 17 00:00:00 2001 From: Paul Gofman Date: Wed, 8 Nov 2023 17:56:17 -0600 Subject: [PATCH] user32: Put 0 to output string even for 1 char buffer in LoadStringW(). --- dlls/user32/resource.c | 13 +++---------- dlls/user32/tests/resource.c | 9 +++++++++ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/dlls/user32/resource.c b/dlls/user32/resource.c index d2937988765..b050e1eba8c 100644 --- a/dlls/user32/resource.c +++ b/dlls/user32/resource.c @@ -185,17 +185,10 @@ INT WINAPI DECLSPEC_HOTPATCH LoadStringW( HINSTANCE instance, UINT resource_id, } i = min(buflen - 1, *p); - if (i > 0) { - memcpy(buffer, p + 1, i * sizeof (WCHAR)); - buffer[i] = 0; - } else { - if (buflen > 1) { - buffer[0] = 0; - return 0; - } - } + memcpy(buffer, p + 1, i * sizeof(WCHAR)); + buffer[i] = 0; - TRACE("%s loaded !\n", debugstr_w(buffer)); + TRACE("returning %s\n", debugstr_w(buffer)); return i; } diff --git a/dlls/user32/tests/resource.c b/dlls/user32/tests/resource.c index da4efd2465f..de4bb2c8a53 100644 --- a/dlls/user32/tests/resource.c +++ b/dlls/user32/tests/resource.c @@ -147,6 +147,15 @@ static void test_LoadStringW(void) "got %lu.\n", GetLastError()); ok(!returnedstringw[0], "got %#x.\n", returnedstringw[0]); ok(returnedstringw[1] == 0xcccc, "got %#x.\n", returnedstringw[1]); + + /* Test short buffer */ + SetLastError(0xdeadbeef); + memset(returnedstringw, 0xcc, sizeof(returnedstringw)); + length1 = LoadStringW(hInst, 2, returnedstringw, 1); /* get resource string */ + ok(!length1, "got %d.\n", length1); + ok(GetLastError() == 0xdeadbeef, "got %lu.\n", GetLastError()); + ok(!returnedstringw[0], "got %#x.\n", returnedstringw[0]); + ok(returnedstringw[1] == 0xcccc, "got %#x.\n", returnedstringw[1]); } static void test_LoadStringA (void)