[PATCH] ntdll: Failure callback is optional in LdrResolveDelayLoadedAPI()

Nikolay Sivov nsivov at codeweavers.com
Thu Oct 5 03:16:31 CDT 2017


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/kernel32/tests/loader.c | 11 +++++++++++
 dlls/ntdll/loader.c          |  3 +++
 2 files changed, 14 insertions(+)

diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c
index 1f6f317676..207e874f7c 100644
--- a/dlls/kernel32/tests/loader.c
+++ b/dlls/kernel32/tests/loader.c
@@ -3006,6 +3006,17 @@ static void test_ResolveDelayLoadedAPI(void)
                 ok(ret == (void*)0xdeadbeef, "Test %u: ResolveDelayLoadedAPI succeeded with %p\n", i, ret);
                 ok(cb_count, "Test %u: Wrong callback count: %d\n", i, cb_count);
             }
+
+            ret = pResolveDelayLoadedAPI(hlib, delaydir, NULL, NULL, &itda[i], 0);
+            if (td[i].succeeds)
+            {
+                ok(ret != NULL, "Test %u: ResolveDelayLoadedAPI failed.\n", i);
+                ok(ret == load, "Test %u: expected %p, got %p.\n", i, load, ret);
+                ok(ret == (void *)itda[i].u1.AddressOfData, "Test %u: expected %p, got %p\n",
+                   i, ret, (void *)itda[i].u1.AddressOfData);
+            }
+            else
+                ok(ret == NULL, "Test %u: unexpected return value %p.\n", i, ret);
         }
         delaydir++;
     }
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index 9c89d57154..187828c010 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -2761,6 +2761,9 @@ void* WINAPI LdrResolveDelayLoadedAPI( void* base, const IMAGE_DELAYLOAD_DESCRIP
     }
 
 fail:
+    if (!dllhook)
+        return NULL;
+
     delayinfo.Size = sizeof(delayinfo);
     delayinfo.DelayloadDescriptor = desc;
     delayinfo.ThunkAddress = addr;
-- 
2.14.2




More information about the wine-patches mailing list