summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo van der Sanden <hv@crypt.org>2004-01-29 15:12:12 +0000
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2004-01-29 21:08:28 +0000
commit289555fe151ab6b9c4f788fbf1bf5f04fe169ea7 (patch)
tree0d931070341b6e957d5dd5f33fff411db95c8049
parente9a641f9d30a042680d0752d8a9ad83b38b401e4 (diff)
downloadperl-289555fe151ab6b9c4f788fbf1bf5f04fe169ea7.tar.gz
Re: [perl #25269] panic: pp_match start/end pointers in m/^(?=.*(a)).*(bc)/
Message-Id: <200401291512.i0TFCCr23736@zen.crypt.org> p4raw-id: //depot/perl@22245
-rw-r--r--pp_hot.c2
-rwxr-xr-xt/op/pat.t10
2 files changed, 9 insertions, 3 deletions
diff --git a/pp_hot.c b/pp_hot.c
index 1874a14529..1dffe945c5 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -1312,10 +1312,10 @@ play_it_again:
/*SUPPRESS 560*/
if ((rx->startp[i] != -1) && rx->endp[i] != -1 ) {
len = rx->endp[i] - rx->startp[i];
+ s = rx->startp[i] + truebase;
if (rx->endp[i] < 0 || rx->startp[i] < 0 ||
len < 0 || len > strend - s)
DIE(aTHX_ "panic: pp_match start/end pointers");
- s = rx->startp[i] + truebase;
sv_setpvn(*SP, s, len);
if (DO_UTF8(TARG) && is_utf8_string((U8*)s, len))
SvUTF8_on(*SP);
diff --git a/t/op/pat.t b/t/op/pat.t
index 7757c40236..2348c33b21 100755
--- a/t/op/pat.t
+++ b/t/op/pat.t
@@ -6,7 +6,7 @@
$| = 1;
-print "1..1055\n";
+print "1..1056\n";
BEGIN {
chdir 't' if -d 't';
@@ -3262,5 +3262,11 @@ for (120 .. 130) {
}
}
-# last test 1055
+# perl #25269: panic: pp_match start/end pointers
+ok("a-bc" eq eval {
+ my($x, $y) = "bca" =~ /^(?=.*(a)).*(bc)/;
+ "$x-$y";
+}, 'captures can move backwards in string');
+
+# last test 1056