[PATCH] ntdll: Fix off-by-one error when resolving forwarded ordinals.

Mark Harmstone mark at harmstone.com
Tue Mar 23 20:18:59 CDT 2021


The value after the hash is 1-based, but find_ordinal_export expects a
0-based value - compare with other calls to this function elsewhere in
the file. Ordinal forwards are pretty rare, which is presumably why it
hasn't been spotted before now.

Signed-off-by: Mark Harmstone <mark at harmstone.com>
---
 dlls/ntdll/loader.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index 1f8c67e6ba1..3a90d0b0856 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -642,9 +642,11 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS
                                                  IMAGE_DIRECTORY_ENTRY_EXPORT, &exp_size )))
     {
         const char *name = end + 1;
-        if (*name == '#')  /* ordinal */
-            proc = find_ordinal_export( wm->ldr.DllBase, exports, exp_size, atoi(name+1), load_path );
-        else
+
+        if (*name == '#') { /* ordinal */
+            proc = find_ordinal_export( wm->ldr.DllBase, exports, exp_size,
+                                        atoi(name+1) - exports->Base, load_path );
+        } else
             proc = find_named_export( wm->ldr.DllBase, exports, exp_size, name, -1, load_path );
     }
 
-- 
2.26.3




More information about the wine-devel mailing list