Signed-off-by: Paul Gofman pgofman@codeweavers.com --- dlls/ntdll/signal_i386.c | 2 +- dlls/ntdll/signal_x86_64.c | 2 +- dlls/ntdll/tests/exception.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c index 108f140aeb8..a48edf864d3 100644 --- a/dlls/ntdll/signal_i386.c +++ b/dlls/ntdll/signal_i386.c @@ -518,7 +518,7 @@ static USHORT capture_stack_back_trace( CONTEXT *context, ULONG skip, ULONG coun
for (i = 0; i < count; i++) { - if (!is_valid_frame( frame )) break; + if (!is_valid_frame( frame ) || !frame[1]) break; buffer[i] = (void *)frame[1]; if (hash) *hash += frame[1]; frame = (ULONG *)*frame; diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index 2f91abdbee0..d3a6d9b78c5 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -1509,7 +1509,7 @@ static USHORT capture_stack_back_trace( CONTEXT *context, ULONG skip, ULONG coun status = virtual_unwind( UNW_FLAG_NHANDLER, &dispatch, context ); if (status != STATUS_SUCCESS) return num_entries;
- if (!dispatch.EstablisherFrame) break; + if (!dispatch.EstablisherFrame || !context->Rip) break;
if ((dispatch.EstablisherFrame & 7) || dispatch.EstablisherFrame < (ULONG64)NtCurrentTeb()->Tib.StackLimit || diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c index 1d7f5ed4408..846baeda4c8 100644 --- a/dlls/ntdll/tests/exception.c +++ b/dlls/ntdll/tests/exception.c @@ -9143,7 +9143,7 @@ static void test_walk_stack(void) { ok(addrs[i] == addrs2[i], "i %u, addresses do not match, %p vs %p.\n", i, addrs[i], addrs2[i]); } - todo_wine ok(!!addrs[frame_count - 1], "Expected non-NULL last address.\n"); + ok(!!addrs[frame_count - 1], "Expected non-NULL last address.\n");
memset(addrs, 0xcc, sizeof(addrs)); memset(addrs2, 0xcc, sizeof(addrs2)); @@ -9158,7 +9158,7 @@ static void test_walk_stack(void) { ok(addrs[i] == addrs2[i], "i %u, addresses do not match, %p vs %p.\n", i, addrs[i], addrs2[i]); } - todo_wine ok(!!addrs[frame_count - 1], "Expected non-NULL last address.\n"); + ok(!!addrs[frame_count - 1], "Expected non-NULL last address.\n"); }
START_TEST(exception)