summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Mitchell <davem@iabyn.com>2023-01-18 13:52:26 +0000
committerYves Orton <demerphq@gmail.com>2023-02-28 20:53:51 +0800
commit504d203b2761303e5fba6cae79e35710d0618276 (patch)
tree9dddbc4b1ab3e1196bbbbc268e83920caffd0b5f
parent043a585606181ef006e5a95043d7f1388c7b425d (diff)
downloadperl-504d203b2761303e5fba6cae79e35710d0618276.tar.gz
Perl_deb_stack_all() - handle empty CX stack
This function handles perl -Dsv, producing output like STACK 0: MAIN CX 0: BLOCK => CX 1: SUB => UNDEF PV("main"\0) retop=leave STACK 1: MAGIC CX 0: SUB => IV(1) When a CX stack had zero contexts pushed (like can sometimes happen when something has just done a PUSHSTACKi() and no op has pushed a BLOCK or SUB or whatever yet), then the code for determining where the next markstack pointer is (by peeking ahead into the first CX of the next SI) was accessing random garbage at cx[0]. This commit fixes that.
-rw-r--r--deb.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/deb.c b/deb.c
index 64ff5874cb..0814478e46 100644
--- a/deb.c
+++ b/deb.c
@@ -320,7 +320,10 @@ Perl_deb_stack_all(pTHX)
}
if (CxTYPE(&(si_n->si_cxstack[i])) == CXt_SUBST)
continue;
- cx_n = &(si_n->si_cxstack[i]);
+ if (si_n->si_cxix >= 0)
+ cx_n = &(si_n->si_cxstack[i]);
+ else
+ cx_n = NULL;
break;
}