Module: wine Branch: master Commit: a6451971a2f89219b56f47731ca9091c9ff5c24c URL: https://gitlab.winehq.org/wine/wine/-/commit/a6451971a2f89219b56f47731ca9091...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Feb 2 19:09:23 2023 +0100
kernelbase: Report correct errors in GetModuleHandleExA().
---
dlls/kernel32/tests/module.c | 18 ++++++++++++++++++ dlls/kernelbase/loader.c | 13 ++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/tests/module.c b/dlls/kernel32/tests/module.c index 9efbdba336d..956595bf2a1 100644 --- a/dlls/kernel32/tests/module.c +++ b/dlls/kernel32/tests/module.c @@ -953,6 +953,10 @@ static void init_pointers(void)
static void testGetModuleHandleEx(void) { + static const char longname[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; static const WCHAR kernel32W[] = {'k','e','r','n','e','l','3','2',0}; static const WCHAR nosuchmodW[] = {'n','o','s','u','c','h','m','o','d',0}; BOOL ret; @@ -986,6 +990,20 @@ static void testGetModuleHandleEx(void) ok( error == ERROR_MOD_NOT_FOUND, "got %lu\n", error ); ok( mod == NULL, "got %p\n", mod );
+ SetLastError( 0xdeadbeef ); + ret = GetModuleHandleExA( 0, longname, NULL ); + error = GetLastError(); + ok( !ret, "unexpected success\n" ); + ok( error == ERROR_INVALID_PARAMETER, "got %lu\n", error ); + + SetLastError( 0xdeadbeef ); + mod = (HMODULE)0xdeadbeef; + ret = GetModuleHandleExA( 0, longname, &mod ); + error = GetLastError(); + ok( !ret, "unexpected success\n" ); + ok( error == ERROR_MOD_NOT_FOUND, "got %lu\n", error ); + ok( mod == NULL, "got %p\n", mod ); + SetLastError( 0xdeadbeef ); ret = GetModuleHandleExW( 0, NULL, NULL ); error = GetLastError(); diff --git a/dlls/kernelbase/loader.c b/dlls/kernelbase/loader.c index 0fd2d7b7c99..22dff7ba56b 100644 --- a/dlls/kernelbase/loader.c +++ b/dlls/kernelbase/loader.c @@ -352,10 +352,21 @@ BOOL WINAPI DECLSPEC_HOTPATCH GetModuleHandleExA( DWORD flags, LPCSTR name, HMOD { WCHAR *nameW;
+ if (!module) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + if (!name || (flags & GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS)) return GetModuleHandleExW( flags, (LPCWSTR)name, module );
- if (!(nameW = file_name_AtoW( name, FALSE ))) return FALSE; + if (!(nameW = file_name_AtoW( name, FALSE ))) + { + *module = NULL; + SetLastError( ERROR_MOD_NOT_FOUND ); + return FALSE; + } return GetModuleHandleExW( flags, nameW, module ); }