From ea47826047e8bb175b1b0e0286d7d7b8cf15c7fe Mon Sep 17 00:00:00 2001 From: Jon Turney Date: Tue, 1 Nov 2022 14:01:08 +0000 Subject: [PATCH] Cygwin: Handle out of order modules for module offsets in stackdump Improve address to module+offset conversion, to work correctly in the presence of out-of-order elements in InMemoryOrderModuleList. Fixes: d59651d4 --- winsup/cygwin/exceptions.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 8cc454c90..c3433ab94 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -342,11 +342,13 @@ prettyprint_va (PVOID func_va) { PLDR_DATA_TABLE_ENTRY mod = CONTAINING_RECORD (x, LDR_DATA_TABLE_ENTRY, InMemoryOrderLinks); - if (mod->DllBase > func_va) + if ((func_va < mod->DllBase) || + (func_va > (PVOID)((DWORD_PTR)mod->DllBase + mod->SizeOfImage))) continue; __small_sprintf (buf, "%S+0x%x", &mod->BaseDllName, (DWORD_PTR)func_va - (DWORD_PTR)mod->DllBase); + break; } return buf; -- 2.38.1