Prevent crash in debugger.
diff --git a/debugger/db_disasm.c b/debugger/db_disasm.c
index 62e121d..c7ad0e2 100644
--- a/debugger/db_disasm.c
+++ b/debugger/db_disasm.c
@@ -1036,15 +1036,22 @@
}
else {
- /* try to get destination of indirect call)
- works not for segmented adresses */
+ /* try to get destination of indirect call
+ does not work for segmented adresses */
if (!seg && byref) {
- DBG_ADDR dbg_addr = {0,0,*(LPDWORD)(addrp->disp)};
- fprintf(stderr,"0x%x -> ", addrp->disp);
- if ( DEBUG_IsBadReadPtr( &dbg_addr, sizeof(DWORD)))
- fprintf(stderr, "(invalid destination)");
- else
- db_task_printsym(dbg_addr.off, 0);
+ DBG_ADDR dbg_addr = {NULL, 0, 0};
+
+ dbg_addr.off = addrp->disp;
+ fprintf(stderr,"0x%x -> ", addrp->disp);
+ if (DEBUG_IsBadReadPtr( &dbg_addr, sizeof(LPDWORD))) {
+ fprintf(stderr, "(invalid source)");
+ } else {
+ dbg_addr.off = *(LPDWORD)(addrp->disp);
+ if (DEBUG_IsBadReadPtr( &dbg_addr, sizeof(DWORD)))
+ fprintf(stderr, "(invalid destination)");
+ else
+ db_task_printsym(dbg_addr.off, 0);
+ }
}
else
db_task_printsym(addrp->disp, size);