From: Trent Waddington <trent.waddington@tensorworks.com.au> --- dlls/kernel32/tests/loader.c | 8 ++------ dlls/kernelbase/loader.c | 9 ++++++++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c index 2d3934301b9..50b8e3d2750 100644 --- a/dlls/kernel32/tests/loader.c +++ b/dlls/kernel32/tests/loader.c @@ -1572,9 +1572,7 @@ static void test_getmodulefilenamew_string_termination(void) ok(err == ERROR_INSUFFICIENT_BUFFER, "didn't get expected error getting path for NULL module with short buffer: %lu\n", err); dll_name_term = wcsnlen(dll_name, MAX_PATH); ok(dll_name_term > 0, "can't get path for NULL module with short buffer, dll_name_term=%Iu\n", dll_name_term); - todo_wine { - ok(dll_name_term == dll_name_len - 1, "incorrect path termination for NULL module with short buffer. Expected %Iu got %Iu. rv=%lu\n", dll_name_len - 1, dll_name_term, rv); - } + ok(dll_name_term == dll_name_len - 1, "incorrect path termination for NULL module with short buffer. Expected %Iu got %Iu. rv=%lu\n", dll_name_len - 1, dll_name_term, rv); } static void test_getmodulefilenamea_string_termination(void) @@ -1597,9 +1595,7 @@ static void test_getmodulefilenamea_string_termination(void) ok(err == ERROR_INSUFFICIENT_BUFFER, "didn't get expected error getting path for NULL module with short buffer: %lu\n", err); dll_name_term = strnlen(dll_name, MAX_PATH); ok(dll_name_term > 0, "can't get path for NULL module with short buffer, dll_name_term=%Iu\n", dll_name_term); - todo_wine { - ok(dll_name_term == dll_name_len - 1, "incorrect path termination for NULL module with short buffer. Expected %Iu got %Iu. rv=%lu\n", dll_name_len - 1, dll_name_term, rv); - } + ok(dll_name_term == dll_name_len - 1, "incorrect path termination for NULL module with short buffer. Expected %Iu got %Iu. rv=%lu\n", dll_name_len - 1, dll_name_term, rv); } /* Verify linking style of import descriptors */ diff --git a/dlls/kernelbase/loader.c b/dlls/kernelbase/loader.c index f4e1ca2e23a..6c6f1f31881 100644 --- a/dlls/kernelbase/loader.c +++ b/dlls/kernelbase/loader.c @@ -315,7 +315,14 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetModuleFileNameW( HMODULE module, LPWSTR filena name.Buffer = filename; name.MaximumLength = min( size, UNICODE_STRING_MAX_CHARS ) * sizeof(WCHAR); status = LdrGetDllFullName( module, &name ); - if (!status || status == STATUS_BUFFER_TOO_SMALL) len = name.Length / sizeof(WCHAR); + if (!status || status == STATUS_BUFFER_TOO_SMALL) + { + len = name.Length / sizeof(WCHAR); + /* LdrGetDllFullName calls RtlCopyUnicodeString which should terminate + if there's space, otherwise: */ + if (status == STATUS_BUFFER_TOO_SMALL && size > 0) + filename[size - 1] = 0; + } SetLastError( RtlNtStatusToDosError( status )); done: TRACE( "%s\n", debugstr_wn(filename, len) ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10291