This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
add range.t test for RT #130841
authorDavid Mitchell <davem@iabyn.com>
Tue, 7 Mar 2017 15:22:49 +0000 (15:22 +0000)
committerDavid Mitchell <davem@iabyn.com>
Wed, 15 Mar 2017 09:19:54 +0000 (09:19 +0000)
t/op/range.t

index e58a39c..02a38e0 100644 (file)
@@ -9,7 +9,7 @@ BEGIN {
 
 use Config;
 
-plan (145);
+plan (146);
 
 is(join(':',1..5), '1:2:3:4:5');
 
@@ -417,4 +417,33 @@ is( ( join ' ', map { join '', map ++$_, 'a'..'d'      } 1..2 ), 'bcde bcde',
 $s = ''; for (1..2) { for ('a'..'d') { $s .= ++$_ } $s.=' ' if $_==1; }
 is( $s, 'bcde bcde','modifiable alpha counting loop counter' );
 
-# EOF
+# RT #130841
+# generating an extreme range triggered a croak, which if caught,
+# left the temps stack small but with a very large PL_tmps_max
+
+fresh_perl_like(<<'EOF', qr/\Aok 1 ok 2\Z/, {}, "RT #130841");
+my $max_iv = (~0 >> 1);
+eval {
+    my @range = 1..($max_iv - 1);
+};
+if ($@ =~ /panic: memory wrap|Out of memory/) {
+    print "ok 1";
+}
+else {
+    print "unexpected err status: [$@]";
+}
+
+# create and push lots of temps
+my $max = 10_000;
+my @ints = map $_+1, 0..($max-1);
+my $sum = 0;
+$sum += $_ for @ints;
+my $exp = $max*($max+1)/2;
+if ($sum == $exp) {
+    print " ok 2";
+}
+else {
+    print " unexpected sum: [$sum]; expected: [$exp]";
+}
+EOF
+