From a729af0e9c0027e7f9686df7e3d85ec1ab3cfb37 Mon Sep 17 00:00:00 2001 From: Martin Storsjo Date: Tue, 25 Aug 2020 12:26:25 +0300 Subject: [PATCH] ntdll: Set handler_data correctly in arm64 RtlVirtualUnwind. 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 Signed-off-by: Alexandre Julliard --- 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 134e40545fd..5521e915a76 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 dd9eb966fc8..1e9047383ba 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",