diff options
author | Nicholas Clark <nick@ccl4.org> | 2005-11-30 13:55:05 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2005-11-30 13:55:05 +0000 |
commit | 8f7f721921e56db1ab4fa5e3365e8f86077b2518 (patch) | |
tree | b122a162e93dba15add4550bd04174a815d2f7a4 /regexec.c | |
parent | 0b599ae526552f509f1358eaeec80cf8049ddcf2 (diff) | |
download | perl-8f7f721921e56db1ab4fa5e3365e8f86077b2518.tar.gz |
The regexp engine should check SV flags rather than SV type for
determining if something is a reference, because under the debugger
the value returned by the swash code is SVt_PVMG.
Not doing this has the side effect of repeatedly reassigning the
same array element, which causes destructors to fire on the reassignment
which in turn causes &utf8::DESTROY to run outside of the pseudo-safety
of save_re_context, which under the debugger involves re-entering the
regexp engine, which causes corruption of the regexp engine's global
state.
p4raw-id: //depot/perl@26228
Diffstat (limited to 'regexec.c')
-rw-r--r-- | regexec.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -4668,7 +4668,7 @@ Perl_regclass_swash(pTHX_ register const regnode* node, bool doinit, SV** listsv * documentation of these array elements. */ si = *ary; - a = SvTYPE(ary[1]) == SVt_RV ? &ary[1] : 0; + a = SvROK(ary[1]) ? &ary[1] : 0; b = SvTYPE(ary[2]) == SVt_PVAV ? &ary[2] : 0; if (a) |