X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=regcomp.c;h=7c8c3911db8c9da4638f673636089547a401d694;hb=37be2b3976e33708042402101fbafebc36dcb7a3;hp=99cb4645e9962595eedab7061956cf6f711bc957;hpb=6bdeddd23b939aa3cc0ba14b253df11198918e70;p=p5sagit%2Fp5-mst-13.2.git diff --git a/regcomp.c b/regcomp.c index 99cb464..7c8c391 100644 --- a/regcomp.c +++ b/regcomp.c @@ -4944,9 +4944,13 @@ Perl_reg_named_buff_exists(pTHX_ REGEXP * const rx, SV * const key, SV* Perl_reg_named_buff_firstkey(pTHX_ REGEXP * const rx, const U32 flags) { - (void)hv_iterinit(rx->paren_names); + if ( rx && rx->paren_names ) { + (void)hv_iterinit(rx->paren_names); - return CALLREG_NAMED_BUFF_NEXTKEY(rx, NULL, flags & ~RXapif_FIRSTKEY); + return CALLREG_NAMED_BUFF_NEXTKEY(rx, NULL, flags & ~RXapif_FIRSTKEY); + } else { + return FALSE; + } } SV* @@ -6894,6 +6898,11 @@ tryagain: RExC_seen_zerolen++; ret = reg_node(pRExC_state, KEEPS); *flagp |= SIMPLE; + /* XXX:dmq : disabling in-place substitution seems to + * be necessary here to avoid cases of memory corruption, as + * with: C<$_="x" x 80; s/x\K/y/> -- rgs + */ + RExC_seen |= REG_SEEN_LOOKBEHIND; goto finish_meta_pat; case 'Z': ret = reg_node(pRExC_state, SEOL);