From: Jinoh Kang jinoh.kang.kr@gmail.com
--- dlls/kernel32/tests/loader.c | 3 --- dlls/ntdll/loader.c | 4 ++++ 2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c index c74256ad628..388f7b13a6d 100644 --- a/dlls/kernel32/tests/loader.c +++ b/dlls/kernel32/tests/loader.c @@ -2826,7 +2826,6 @@ static void subtest_export_forwarder_dep_chain( size_t num_chained_export_module
status = LdrFindEntryForAddress( modules[0], &mod ); ok( !status, "LdrFindEntryForAddress returned %#lx", status ); - todo_wine_if(importer_index == 1) ok( !(mod->Flags & LDR_PROCESS_ATTACHED), "expected LDR_PROCESS_ATTACHED to be unset (Flags=%#lx)\n", mod->Flags ); }
@@ -2886,9 +2885,7 @@ static void subtest_export_forwarder_dep_chain( size_t num_chained_export_module status = pLdrUnregisterDllNotification( cookie ); ok( !status, "LdrUnregisterDllNotification returned %#lx.\n", status );
- todo_wine_if(importer_index == 1) ok( !lnc.load_count, "got %u for load count of first module\n", lnc.load_count ); - todo_wine_if(importer_index == 1) ok( !lnc.unload_count, "got %u for unload count of first module\n", lnc.unload_count ); }
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index 5be6e44435f..1e43c089203 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -1727,6 +1727,10 @@ static NTSTATUS process_attach( LDR_DDAG_NODE *node, LPVOID lpReserved ) mod = CONTAINING_RECORD( node->Modules.Flink, LDR_DATA_TABLE_ENTRY, NodeModuleLink ); wm = CONTAINING_RECORD( mod, WINE_MODREF, ldr );
+ /* Skip initialization entirely if requested */ + if (wm->ldr.Flags & LDR_DONT_RESOLVE_REFS) + return status; + /* prevent infinite recursion in case of cyclical dependencies */ if ( ( wm->ldr.Flags & LDR_LOAD_IN_PROGRESS ) || ( wm->ldr.Flags & LDR_PROCESS_ATTACHED ) )