зеркало из https://github.com/mozilla/gecko-dev.git
Bug 125427 - Taint error in duplicates.cgi with perl < 5.6
r=gerv, myk
This commit is contained in:
Родитель
7d1bd63099
Коммит
a7ce931ca0
|
@ -69,20 +69,36 @@ $sortby = "count" if $sortby eq "dup_count";
|
|||
my $today = days_ago(0);
|
||||
my $yesterday = days_ago(1);
|
||||
|
||||
if (<data/duplicates/dupes$today*>) {
|
||||
dbmopen(%dbmcount, "data/duplicates/dupes$today", 0644)
|
||||
|| DisplayError("Can't open today ($today)'s dupes file: $!")
|
||||
&& exit;
|
||||
# We don't know the exact file name, because the extention depends on the
|
||||
# underlying dbm library, which could be anything. We can't glob, because
|
||||
# perl < 5.6 considers if (<*>) { ... } to be tainted
|
||||
# Instead, just check the return value for today's data and yesterday's,
|
||||
# and ignore file not found errors
|
||||
|
||||
use Errno;
|
||||
use Fcntl;
|
||||
|
||||
if (!tie(%dbmcount, 'AnyDBM_File', "data/duplicates/dupes$today",
|
||||
O_RDONLY, 0644)) {
|
||||
if ($!{ENOENT}) {
|
||||
if (!tie(%dbmcount, 'AnyDBM_File', "data/duplicates/dupes$yesterday",
|
||||
O_RDONLY, 0644)) {
|
||||
if ($!{ENOENT}) {
|
||||
ThrowUserError("There are no duplicate statistics for today " .
|
||||
"($today) or yesterday.",
|
||||
"Cannot find duplicate statistics");
|
||||
} else {
|
||||
ThrowUserError("There are no duplicate statistics for today " .
|
||||
"($today), and an error occurred when " .
|
||||
"accessing yesterday's dupes file: $!.",
|
||||
"Error reading yesterday's dupes file");
|
||||
}
|
||||
elsif (<data/duplicates/dupes$yesterday*>) {
|
||||
dbmopen(%dbmcount, "data/duplicates/dupes$yesterday", 0644)
|
||||
|| DisplayError("Can't open yesterday ($yesterday)'s dupes file: $!")
|
||||
&& exit;
|
||||
}
|
||||
else {
|
||||
DisplayError("There are no duplicate statistics for today ($today) or
|
||||
yesterday.");
|
||||
exit;
|
||||
} else {
|
||||
ThrowUserError("An error occurred when accessing today ($today)'s " .
|
||||
"dupes file: $!.",
|
||||
"Error reading today's dupes file");
|
||||
}
|
||||
}
|
||||
|
||||
# Copy hash (so we don't mess up the on-disk file when we remove entries)
|
||||
|
@ -101,11 +117,15 @@ my $dobefore = 0;
|
|||
my %delta;
|
||||
my $whenever = days_ago($changedsince);
|
||||
|
||||
if (<data/duplicates/dupes$whenever*>) {
|
||||
dbmopen(%before, "data/duplicates/dupes$whenever", 0644)
|
||||
|| DisplayError("Can't open $changedsince days ago ($whenever)'s " .
|
||||
"dupes file: $!");
|
||||
|
||||
if (!tie(%before, 'AnyDBM_File', "data/duplicates/dupes$whenever",
|
||||
O_RDONLY, 0644)) {
|
||||
# Ignore file not found errors
|
||||
if (!$!{ENOENT}) {
|
||||
ThrowUserError("Can't open $changedsince days ago ($whenever)'s " .
|
||||
"dupes file: $!",
|
||||
"Error reading previous dupes file");
|
||||
}
|
||||
} else {
|
||||
# Calculate the deltas
|
||||
($delta{$_} = $count{$_} - $before{$_}) foreach (keys(%count));
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче