user32: Put 0 to output string even for 1 char buffer in LoadStringW().

This commit is contained in:
Paul Gofman 2023-11-08 17:56:17 -06:00 committed by Alexandre Julliard
parent 726027d601
commit ad9303d888
2 changed files with 12 additions and 10 deletions

View file

@ -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;
}

View file

@ -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)