[PATCH 1/5] ntdll: Set handler_data correctly in arm64 RtlVirtualUnwind

Martin Storsjo martin at martin.st
Tue Aug 25 04:26:25 CDT 2020


This matches what tests show is done on actual windows, in the
current testcases; in all currently tested cases, handler_data is
reset to NULL when no handler is returned.

Signed-off-by: Martin Storsjo <martin at martin.st>
---
 dlls/ntdll/signal_arm64.c    | 2 ++
 dlls/ntdll/tests/exception.c | 4 ++++
 2 files changed, 6 insertions(+)

diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c
index 134e40545f..5521e915a7 100644
--- a/dlls/ntdll/signal_arm64.c
+++ b/dlls/ntdll/signal_arm64.c
@@ -889,6 +889,8 @@ PVOID WINAPI RtlVirtualUnwind( ULONG type, ULONG_PTR base, ULONG_PTR pc,
 
     TRACE( "type %x pc %lx sp %lx func %lx\n", type, pc, context->Sp, base + func->BeginAddress );
 
+    *handler_data = NULL;
+
     if (func->u.s.Flag)
         handler = unwind_packed_data( base, pc, func, context, ctx_ptr );
     else
diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c
index dd9eb966fc..1e9047383b 100644
--- a/dlls/ntdll/tests/exception.c
+++ b/dlls/ntdll/tests/exception.c
@@ -4331,6 +4331,10 @@ static void call_virtual_unwind( int testnum, const struct unwind_test *test )
         else
         {
             ok( handler == NULL, "%u/%u: handler %p instead of NULL\n", testnum, i, handler );
+            ok( data == (test->results[i].handler < 0 ?
+                        (void *)0xdeadbeef : NULL),
+                "%u/%u: handler data set to %p/%p\n", testnum, i, data,
+                (test->results[i].handler < 0 ? (void *)0xdeadbeef : NULL) );
         }
 
         ok( context.Pc == test->results[i].pc, "%u/%u: wrong pc %p/%p\n",
-- 
2.17.1




More information about the wine-devel mailing list