This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
add PL_curstackinfo->si_stack_hwm
authorDavid Mitchell <davem@iabyn.com>
Tue, 13 Jun 2017 08:11:13 +0000 (09:11 +0100)
committerDavid Mitchell <davem@iabyn.com>
Sat, 24 Jun 2017 08:38:14 +0000 (09:38 +0100)
commit87058c31e9fa350bda8d797127c9c175d0b1a893
treea30a1b8e831b83950e5a4a7a6b64bec517b1455a
parent23c687d9d091a545afb2b769447c17fba98ba87a
add PL_curstackinfo->si_stack_hwm

On debugging builds only, add a mechanism for checking pp function calls
for insufficient stack extending. It works by:

* make the runops loop set a high-water-mark (HWM) variable equal to
  PL_stack_sp just before calling each pp function;

* make EXTEND() etc update this HWM;

* on return from the pp function, panic if PL_stack_sp is > HWM.

This detects whether pp functions are pushing more items onto the stack
than they are requesting space for.

There's a possibility of false positives if the code is doing weird stuff
like direct manipulation of stacks via PL_curstack, SWITCHSTACK() etc.

It's also possible that one pp function "knows" that a previous pp
function will have already grown the stack enough. Currently the only
place in core that seems to do this is pp_enteriter, which allocates 1
stack slot so that pp_iter doesn't have to check each time it returns
&PL_sv_yes/no. To accommodate this, the new macro EXTEND_SKIP() has been
added, that tells perl that it's safely skipping an EXTEND() here.
cop.h
dump.c
pp.h
pp_hot.c
scope.c