From c133264b69f1c026052338b62aa6e0dfbede2c03 Mon Sep 17 00:00:00 2001 From: Nick Fox Date: Fri, 29 Oct 2021 03:17:03 +0000 Subject: [PATCH] ntdll: Fix LdrGetDllPath with LOAD_WITH_ALTERED_SEARCH_PATH without a path. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=26350 Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51821 Signed-off-by: Nick Fox Signed-off-by: Alexandre Julliard (cherry picked from commit ef26f7bd5cf36806f7b465dc1942ab6a2e0541b9) Signed-off-by: Michael Stefaniuc --- dlls/kernel32/tests/path.c | 2 -- dlls/ntdll/loader.c | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/dlls/kernel32/tests/path.c b/dlls/kernel32/tests/path.c index 86d604f6a96..2955be0da9c 100644 --- a/dlls/kernel32/tests/path.c +++ b/dlls/kernel32/tests/path.c @@ -2659,7 +2659,6 @@ static void test_LdrGetDllPath(void) ret = pLdrGetDllPath( fooW, LOAD_WITH_ALTERED_SEARCH_PATH, &path, &unknown_ptr ); ok( !ret, "LdrGetDllPath failed %x\n", ret ); ok( !unknown_ptr, "unknown ptr %p\n", unknown_ptr ); - todo_wine build_search_path( buffer, ARRAY_SIZE(buffer), NULL, NULL, TRUE ); ok( path_equal( path, buffer ), "got %s expected %s\n", wine_dbgstr_w(path), wine_dbgstr_w(buffer)); pRtlReleasePath( path ); @@ -2667,7 +2666,6 @@ static void test_LdrGetDllPath(void) ret = pLdrGetDllPath( L"temp/foo", LOAD_WITH_ALTERED_SEARCH_PATH, &path, &unknown_ptr ); ok( !ret, "LdrGetDllPath failed %x\n", ret ); ok( !unknown_ptr, "unknown ptr %p\n", unknown_ptr ); - todo_wine build_search_path( buffer, ARRAY_SIZE(buffer), NULL, NULL, TRUE ); ok( path_equal( path, buffer ), "got %s expected %s\n", wine_dbgstr_w(path), wine_dbgstr_w(buffer)); pRtlReleasePath( path ); diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index 35527119eae..d10d126eb41 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -3829,7 +3829,7 @@ NTSTATUS WINAPI LdrGetDllPath( PCWSTR module, ULONG flags, PWSTR *path, PWSTR *u else { const WCHAR *dlldir = dll_directory.Length ? dll_directory.Buffer : NULL; - if (!(flags & LOAD_WITH_ALTERED_SEARCH_PATH)) + if (!(flags & LOAD_WITH_ALTERED_SEARCH_PATH) || !wcschr( module, L'\\' )) module = NtCurrentTeb()->Peb->ProcessParameters->ImagePathName.Buffer; status = get_dll_load_path( module, dlldir, dll_safe_mode, path ); }