]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1074980: Forbid the { foo => $cgi->param() } syntax to prevent data override
authorFrédéric Buclin <LpSolit@gmail.com>
Mon, 6 Oct 2014 14:35:25 +0000 (14:35 +0000)
committerDavid Lawrence <dkl@mozilla.com>
Mon, 6 Oct 2014 14:35:25 +0000 (14:35 +0000)
r=dkl,a=sgreen

t/002goodperl.t

index e691b39ddf0a1c5f9e5f8fd17acdfa2bf8be7753..2cbee8ef58be95d83100a7c7ecea495288fd3956 100644 (file)
@@ -16,7 +16,7 @@ use lib 't';
 
 use Support::Files;
 
-use Test::More tests => (scalar(@Support::Files::testitems) * 3);
+use Test::More tests => (scalar(@Support::Files::testitems) * 4);
 
 my @testitems = @Support::Files::testitems; # get the files to test.
 
@@ -110,4 +110,35 @@ foreach my $file (@testitems) {
     
     close(FILE);
 }
+
+# Forbird the { foo => $cgi->param() } syntax, for security reasons.
+foreach my $file (@testitems) {
+    $file =~ s/\s.*$//; # nuke everything after the first space (#comment)
+    next unless $file; # skip null entries
+    if (!open(FILE, $file)) {
+        ok(0, "could not open $file --WARNING");
+        next;
+    }
+    my $lineno = 0;
+    my @unsafe_args;
+
+    while (my $file_line = <FILE>) {
+        $lineno++;
+        $file_line =~ s/^\s*(.+)\s*$/$1/; # Remove leading and trailing whitespaces.
+        if ($file_line =~ /^[^#]+=> \$cgi\->param/) {
+            push(@unsafe_args, "$file_line on line $lineno");
+        }
+    }
+
+    if (@unsafe_args) {
+        ok(0, "$file incorrectly passes a CGI argument to a hash --ERROR\n" .
+              join("\n", @unsafe_args));
+    }
+    else {
+        ok(1, "$file has no vulnerable hash syntax");
+    }
+
+    close(FILE);
+}
+
 exit 0;