This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
re/pat_re_eval.t: tidy some 'use re eval' tests
authorDavid Mitchell <davem@iabyn.com>
Thu, 16 Feb 2012 15:53:50 +0000 (15:53 +0000)
committerDavid Mitchell <davem@iabyn.com>
Wed, 13 Jun 2012 12:32:48 +0000 (13:32 +0100)
reduce the scope of 'use re eval' to the barest minimum;
I also discovered while doing this that one block had the use; ... no;
swapped, and this didn't die, so I've added a TODO test.

t/re/pat_re_eval.t

index 0290bc1..a650b6a 100644 (file)
@@ -22,7 +22,7 @@ BEGIN {
 }
 
 
 }
 
 
-plan tests => 252;  # Update this when adding/deleting tests.
+plan tests => 255;  # Update this when adding/deleting tests.
 
 run_tests() unless caller;
 
 
 run_tests() unless caller;
 
@@ -431,9 +431,10 @@ sub run_tests {
 
            # literal qr code only created once, embedded with text + run code
 
 
            # literal qr code only created once, embedded with text + run code
 
-           use re 'eval';
            $cr4 //= qr/C(??{$x})$/;
            my $code3 = 'A(??{$x})';
            $cr4 //= qr/C(??{$x})$/;
            my $code3 = 'A(??{$x})';
+
+           use re 'eval';
            ok("A$x-BCa" =~ /^$code3-B$cr4/,
                            "[$x] literal qr once embedded text + run code");
            no re 'eval';
            ok("A$x-BCa" =~ /^$code3-B$cr4/,
                            "[$x] literal qr once embedded text + run code");
            no re 'eval';
@@ -456,17 +457,26 @@ sub run_tests {
 
            # literal qr code, embedded with text + run code
 
 
            # literal qr code, embedded with text + run code
 
-           no re 'eval';
            my $r4 = qr/C(??{$x})$/;
            my $code4 = '(??{$x})';
            my $r4 = qr/C(??{$x})$/;
            my $code4 = '(??{$x})';
+
+           use re 'eval';
            ok("A$x-BC$x" =~ /^A$code4-B$r4/,
                                "[$x] literal qr embedded text + run code");
            ok("A$x-BC$x" =~ /^A$code4-B$r4/,
                                "[$x] literal qr embedded text + run code");
-           use re 'eval';
+           no re 'eval';
+
+           {
+               local  $::TODO = 're_eval not yet secure!!';
+               eval { "A$x-BC$x" =~ /^A$code4-B$r4/ };
+               like($@, qr/Eval-group not allowed/, "runtime code5");
+           }
+
 
            # nested qr in different scopes
 
            my $code5 = '(??{$x})';
            my $r5 = qr/C(??{$x})/;
 
            # nested qr in different scopes
 
            my $code5 = '(??{$x})';
            my $r5 = qr/C(??{$x})/;
+
            use re 'eval';
            my $r6 = qr/$code5-C(??{$x})/;
            no re 'eval';
            use re 'eval';
            my $r6 = qr/$code5-C(??{$x})/;
            no re 'eval';