From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/dwrite/font.c | 8 ++++++-- dlls/dwrite/tests/font.c | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c index a37600299cd..ffe2981432e 100644 --- a/dlls/dwrite/font.c +++ b/dlls/dwrite/font.c @@ -5751,11 +5751,14 @@ IDWriteFontFileLoader *get_local_fontfile_loader(void) HRESULT get_local_refkey(const WCHAR *path, const FILETIME *writetime, void **key, UINT32 *size) { struct local_refkey *refkey; + size_t len;
if (!path) return E_INVALIDARG;
- *size = FIELD_OFFSET(struct local_refkey, name) + (wcslen(path)+1)*sizeof(WCHAR); + len = wcslen(path) + 1; + + *size = FIELD_OFFSET(struct local_refkey, name) + len * sizeof(WCHAR); *key = NULL;
if (!(refkey = malloc(*size))) @@ -5771,7 +5774,8 @@ HRESULT get_local_refkey(const WCHAR *path, const FILETIME *writetime, void **ke else memset(&refkey->writetime, 0, sizeof(refkey->writetime)); } - wcscpy(refkey->name, path); + memcpy(refkey->name, path, len * sizeof(WCHAR)); + wcsupr(refkey->name);
*key = refkey;
diff --git a/dlls/dwrite/tests/font.c b/dlls/dwrite/tests/font.c index 8cbf97a1a7e..faffd32a7ae 100644 --- a/dlls/dwrite/tests/font.c +++ b/dlls/dwrite/tests/font.c @@ -3519,7 +3519,7 @@ static void test_CreateFontFileReference(void) ok(hr == S_OK, "Failed to get ref key, hr %#lx.\n", hr); ok(key1_size == key2_size, "Unexpected key sizes %u, %u.\n", key1_size, key2_size); if (key1_size == key2_size) - todo_wine ok(!memcmp(key1, key2, key1_size), "Expected matching keys.\n"); + ok(!memcmp(key1, key2, key1_size), "Expected matching keys.\n");
hr = IDWriteFontFile_GetLoader(file, &loader); ok(hr == S_OK, "Unexpected hr %#lx.\n",hr);