diff options
author | Yves Orton <demerphq@gmail.com> | 2022-08-28 12:09:51 +0200 |
---|---|---|
committer | Yves Orton <demerphq@gmail.com> | 2022-09-02 10:05:42 +0200 |
commit | 741a5c7396a0ca90a22ea8d8e0761c70c14b0a77 (patch) | |
tree | 0c442705b8ff90ebda90515e6c601ab6784af8fb /embedvar.h | |
parent | cd55125d69f5f698ef7cbdd650cda7d2e59fc388 (diff) | |
download | perl-741a5c7396a0ca90a22ea8d8e0761c70c14b0a77.tar.gz |
op.c - Restrict nested eval/BEGIN blocks to a user controllable maximum
Nested BEGIN blocks can cause us to segfault by exhausting
the C stack. Eg:
perl -le'sub f { eval "BEGIN { f() }" } f()'
will segfault. This adds a new interpreter var PL_eval_begin_nest_depth
to keep track of how many layer of eval/BEGIN we have seen, and a new
reserved variable called ${^MAX_NESTED_EVAL_BEGIN_BLOCKS} which can be
used to raise or lower the limit. When set to 0 it blocks BEGIN entirely,
which might be useful from time to time.
This fixes https://github.com/Perl/perl5/issues/20176
Diffstat (limited to 'embedvar.h')
-rw-r--r-- | embedvar.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/embedvar.h b/embedvar.h index 8517b1a9dc..2f392df58e 100644 --- a/embedvar.h +++ b/embedvar.h @@ -127,6 +127,7 @@ #define PL_envgv (vTHX->Ienvgv) #define PL_errgv (vTHX->Ierrgv) #define PL_errors (vTHX->Ierrors) +#define PL_eval_begin_nest_depth (vTHX->Ieval_begin_nest_depth) #define PL_eval_root (vTHX->Ieval_root) #define PL_eval_start (vTHX->Ieval_start) #define PL_evalseq (vTHX->Ievalseq) |