diff options
author | Karl Williamson <public@khwilliamson.com> | 2010-12-12 11:28:20 -0700 |
---|---|---|
committer | Karl Williamson <public@khwilliamson.com> | 2010-12-12 13:13:45 -0700 |
commit | 929fffa4acb2dedab3293617c11903a4914d8fdf (patch) | |
tree | 20f3e450dbab6c7d1e9002cfbbe483379b71bbec | |
parent | 09b1cffef8cddfec3f726ac733cd648d5b6c28c6 (diff) | |
download | perl-929fffa4acb2dedab3293617c11903a4914d8fdf.tar.gz |
blead breaks Attribute::Constant
The problem is that I confused FOLD with ANYOF_FOLD, and as a result,
emitted a locale regnode, which is tainted. Any tests that required
non-tainting started failing
-rw-r--r-- | regcomp.c | 4 | ||||
-rw-r--r-- | t/op/taint.t | 10 |
2 files changed, 11 insertions, 3 deletions
@@ -8955,8 +8955,8 @@ parseit: /* (A locale node can have 1 point and be folded; all the other folds * will include the fold, hence will have 2 points, so we won't get - * here with FOLD set unless it is also locale) */ - ret = reg_node(pRExC_state, (U8) (! FOLD) + * here with ANYOF_FOLD set unless it is also locale) */ + ret = reg_node(pRExC_state, (U8) (! (ANYOF_FLAGS(ret) & ANYOF_FOLD)) ? EXACT : EXACTFL ); diff --git a/t/op/taint.t b/t/op/taint.t index 0decc97461..78b3d5591f 100644 --- a/t/op/taint.t +++ b/t/op/taint.t @@ -17,7 +17,7 @@ use Config; use File::Spec::Functions; BEGIN { require './test.pl'; } -plan tests => 336; +plan tests => 338; $| = 1; @@ -1437,6 +1437,14 @@ end ok(tainted($^A), "tainted formline picture makes a tainted accumulator"); } +{ # Bug #80610 + "Constant(1)" =~ / ^ ([a-z_]\w*) (?: [(] (.*) [)] )? $ /xi; + my $a = $1; + my $b = $2; + ok(! tainted($a), "regex optimization of single char /[]/i doesn't taint"); + ok(! tainted($b), "regex optimization of single char /[]/i doesn't taint"); +} + # This may bomb out with the alarm signal so keep it last SKIP: { skip "No alarm()" unless $Config{d_alarm}; |