summaryrefslogtreecommitdiff
path: root/regexec.c
diff options
context:
space:
mode:
authorHugo van der Sanden <hv@crypt.org>2003-01-02 14:33:49 +0000
committerhv <hv@crypt.org>2003-01-21 02:15:29 +0000
commit4addbd3b37ffede9a798950435a751b9834e67d0 (patch)
tree6e7aab340b50bff1300266a8e5e03c0140a317b2 /regexec.c
parent5c502d376a49ad340448e0e2cf8122d9ef9a6bcf (diff)
downloadperl-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.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/regexec.c b/regexec.c
index f91af17d17..a6fd6aee7e 100644
--- a/regexec.c
+++ b/regexec.c
@@ -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;