summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Williamson <public@khwilliamson.com>2010-12-12 11:28:20 -0700
committerKarl Williamson <public@khwilliamson.com>2010-12-12 13:13:45 -0700
commit929fffa4acb2dedab3293617c11903a4914d8fdf (patch)
tree20f3e450dbab6c7d1e9002cfbbe483379b71bbec
parent09b1cffef8cddfec3f726ac733cd648d5b6c28c6 (diff)
downloadperl-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.c4
-rw-r--r--t/op/taint.t10
2 files changed, 11 insertions, 3 deletions
diff --git a/regcomp.c b/regcomp.c
index 66cadcf3e0..eb34b16553 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -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};