[PATCH v3 4/4] ntdll: Don't return the last NULL address when capturing frames.
Paul Gofman
pgofman at codeweavers.com
Thu Oct 28 11:47:01 CDT 2021
Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
---
dlls/ntdll/signal_i386.c | 2 +-
dlls/ntdll/signal_x86_64.c | 2 +-
dlls/ntdll/tests/exception.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index 69ce62c4168..15e53b6059e 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -519,7 +519,7 @@ USHORT WINAPI RtlCaptureStackBackTrace( ULONG skip, ULONG count, PVOID *buffer,
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 57c7f81f9ea..d277a72436f 100644
--- a/dlls/ntdll/signal_x86_64.c
+++ b/dlls/ntdll/signal_x86_64.c
@@ -1540,7 +1540,7 @@ USHORT WINAPI RtlCaptureStackBackTrace( ULONG skip, ULONG count, PVOID *buffer,
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 121fbedc72e..078881e363f 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");
for (requested_count = frame_count - 1; requested_count < frame_count + 1; ++requested_count)
{
--
2.31.1
More information about the wine-devel
mailing list