diff options
author | George Greer <perl@greerga.m-l.org> | 2010-07-10 19:18:12 -0400 |
---|---|---|
committer | Rafael Garcia-Suarez <rgs@consttype.org> | 2010-07-12 13:53:33 +0200 |
commit | 634d6919699655c843f8d8c3ea64922d0403c499 (patch) | |
tree | b77d3c56a3b4a086cfc3f2877474006ea34e257c /pp_ctl.c | |
parent | 31be325893db1b4bd951b7e64f1557d4c5ca6246 (diff) | |
download | perl-634d6919699655c843f8d8c3ea64922d0403c499.tar.gz |
Fix for RT#2353: catch yyparse() exceptions in (?{...})
Ticket is entitled:
"panic: top_env when localizing a lexical variable in qr{(?{...})}"
but a better description would be:
"(?{...}) does not catch yyparse() exceptions in regex compilation"
Changes Perl_sv_compile_2op() to tell doeval() that it must use
S_try_yyparse() to catch any exception that yyparse() may throw.
Diffstat (limited to 'pp_ctl.c')
-rw-r--r-- | pp_ctl.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -2914,6 +2914,7 @@ Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp) int runtime; CV* runcv = NULL; /* initialise to avoid compiler warnings */ STRLEN len; + bool need_catch; PERL_ARGS_ASSERT_SV_COMPILE_2OP; @@ -2965,11 +2966,14 @@ Perl_sv_compile_2op(pTHX_ SV *sv, OP** startop, const char *code, PAD** padp) PL_op->op_flags = 0; /* Avoid uninit warning. */ PUSHBLOCK(cx, CXt_EVAL|(IN_PERL_COMPILETIME ? 0 : CXp_REAL), SP); PUSHEVAL(cx, 0); + need_catch = CATCH_GET; + CATCH_SET(TRUE); if (runtime) (void) doeval(G_SCALAR, startop, runcv, PL_curcop->cop_seq); else (void) doeval(G_SCALAR, startop, PL_compcv, PL_cop_seqmax); + CATCH_SET(need_catch); POPBLOCK(cx,PL_curpm); POPEVAL(cx); |