This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #118175] prevent a similar overflow for POSIXA
authorTony Cook <tony@develop-help.com>
Sat, 1 Jun 2013 00:54:36 +0000 (10:54 +1000)
committerTony Cook <tony@develop-help.com>
Mon, 3 Jun 2013 12:05:27 +0000 (22:05 +1000)
regexec.c
t/re/pat_rt_report.t

index c39b9f6..1b3e776 100644 (file)
--- a/regexec.c
+++ b/regexec.c
@@ -6904,7 +6904,7 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
         /* FALLTHROUGH */
 
     case POSIXA:
-        if (utf8_target && scan + max < loceol) {
+        if (utf8_target && loceol - scan > max) {
 
             /* We didn't adjust <loceol> at the beginning of this routine
              * because is UTF-8, but it is actually ok to do so, since here, to
index e6ee0dd..005f880 100644 (file)
@@ -22,7 +22,7 @@ BEGIN {
 }
 
 
-plan tests => 2530;  # Update this when adding/deleting tests.
+plan tests => 2531;  # Update this when adding/deleting tests.
 
 run_tests() unless caller;
 
@@ -1157,6 +1157,17 @@ EOP
             '$_ = "abc"; /b/g; $_ = "hello"; print eval q|$\'|,"\n"',
             "c\n", {}, '$\' first mentioned after match');
     }
+
+    {
+       # [perl #118175] threaded perl-5.18.0 fails pat_rt_report_thr.t
+       # this tests some related failures
+       #
+       # The tests in the block *only* fail when run on 32-bit systems
+       # with a malloc that allocates above the 2GB line.  On the system
+       # in the report above that only happened in a thread.
+       my $s = "\x{1ff}" . "f" x 32;
+       ok($s =~ /\x{1ff}[[:alpha:]]+/gca, "POSIXA pointer wrap");
+    }
 } # End of sub run_tests
 
 1;