diff options
author | Hugo van der Sanden <hv@crypt.org> | 2003-01-02 14:33:49 +0000 |
---|---|---|
committer | hv <hv@crypt.org> | 2003-01-21 02:15:29 +0000 |
commit | 4addbd3b37ffede9a798950435a751b9834e67d0 (patch) | |
tree | 6e7aab340b50bff1300266a8e5e03c0140a317b2 /regexec.c | |
parent | 5c502d376a49ad340448e0e2cf8122d9ef9a6bcf (diff) | |
download | perl-4addbd3b37ffede9a798950435a751b9834e67d0.tar.gz |
Re: [perl #17757] s///g fails when using English & study in 5.8.0
Message-Id: <200301021433.h02EXno03562@crypt.compulink.co.uk>
p4raw-id: //depot/perl@18533
Diffstat (limited to 'regexec.c')
-rw-r--r-- | regexec.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -541,6 +541,9 @@ Perl_re_intuit_start(pTHX_ regexp *prog, SV *sv, char *strpos, start_shift + (s - strbeg), end_shift, pp, 0); else goto fail_finish; + /* we may be pointing at the wrong string */ + if (s && RX_MATCH_COPIED(prog)) + s = prog->subbeg + (s - SvPVX(sv)); if (data) *data->scream_olds = s; } @@ -1858,6 +1861,9 @@ Perl_regexec_flags(pTHX_ register regexp *prog, char *stringarg, register char * : (s = fbm_instr((unsigned char*)HOP3(s, back_min, strend), (unsigned char*)strend, must, PL_multiline ? FBMrf_MULTILINE : 0))) ) { + /* we may be pointing at the wrong string */ + if ((flags & REXEC_SCREAM) && RX_MATCH_COPIED(prog)) + s = prog->subbeg + (s - SvPVX(sv)); DEBUG_r( did_match = 1 ); if (HOPc(s, -back_max) > last1) { last1 = HOPc(s, -back_min); @@ -1944,6 +1950,9 @@ Perl_regexec_flags(pTHX_ register regexp *prog, char *stringarg, register char * end_shift, &scream_pos, 1); /* last one */ if (!last) last = scream_olds; /* Only one occurrence. */ + /* we may be pointing at the wrong string */ + else if (RX_MATCH_COPIED(prog)) + s = prog->subbeg + (s - SvPVX(sv)); } else { STRLEN len; |