Module: wine Branch: master Commit: ad9303d888aa0b463f07f16059ce801d8da10ea2 URL: https://gitlab.winehq.org/wine/wine/-/commit/ad9303d888aa0b463f07f16059ce801...
Author: Paul Gofman pgofman@codeweavers.com Date: Wed Nov 8 17:56:17 2023 -0600
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)