summaryrefslogtreecommitdiff
path: root/embedvar.h
diff options
context:
space:
mode:
authorYves Orton <demerphq@gmail.com>2022-08-28 12:09:51 +0200
committerYves Orton <demerphq@gmail.com>2022-09-02 10:05:42 +0200
commit741a5c7396a0ca90a22ea8d8e0761c70c14b0a77 (patch)
tree0c442705b8ff90ebda90515e6c601ab6784af8fb /embedvar.h
parentcd55125d69f5f698ef7cbdd650cda7d2e59fc388 (diff)
downloadperl-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.h1
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)