]> git.donarmstrong.com Git - debbugs.git/blobdiff - cgi/pkgreport.cgi
skip duplicate bugs in get_status_and_filter
[debbugs.git] / cgi / pkgreport.cgi
index 3fc500b355114472122bee11d936a0f60203b51f..859c8edd4226d7a3e1c4acf0abf5e2e4edc42dcb 100755 (executable)
 use warnings;
 use strict;
 
+# Sanitize environent for taint
+BEGIN{
+    delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
+}
+
+binmode(STDOUT,':encoding(UTF-8)');
 use POSIX qw(strftime nice);
 
 use Debbugs::Config qw(:globals :text :config);
@@ -54,6 +60,7 @@ our %param = cgi_parameters(query => $q,
                                       qw(bug-rev pend-rev sev-rev),
                                       qw(maxdays mindays version),
                                       qw(data which dist newest),
+                                      qw(noaffects),
                                      ],
                            default => $default_params,
                           );
@@ -77,7 +84,8 @@ if (exists $param{form_options} and defined $param{form_options}) {
      }
      for my $incexc (qw(include exclude)) {
          next unless exists $param{$incexc};
-         $param{$incexc} = [grep /\S\:\S/, make_list($param{$incexc})];
+         # normalize tag to tags
+         $param{$incexc} = [map {s/^tag:/tags:/; $_} grep /\S\:\S/, make_list($param{$incexc})];
      }
      for my $key (keys %package_search_keys) {
          next unless exists $param{key};
@@ -93,6 +101,16 @@ if (exists $param{form_options} and defined $param{form_options}) {
      exit 0;
 }
 
+# normalize innclude/exclude keys; currently this is in two locations,
+# which is suboptimal. Closes: #567407
+for my $incexc (qw(include exclude)) {
+    next unless exists $param{$incexc};
+    # normalize tag to tags
+    $param{$incexc} = [map {s/^tag:/tags:/; $_} make_list($param{$incexc})];
+}
+
+
+
 # map from yes|no to 1|0
 for my $key (qw(repeatmerged bug-rev pend-rev sev-rev)) {
      if (exists $param{$key}){
@@ -199,7 +217,7 @@ our %cats = (
     } ],
     "classification" => [ {
         "nam" => "Classification",
-        "pri" => [qw(pending=pending+tag=wontfix 
+        "pri" => [qw(pending=pending+tag=wontfix
                      pending=pending+tag=moreinfo
                      pending=pending+tag=patch
                      pending=pending+tag=confirmed
@@ -375,7 +393,14 @@ if (not exists $param{affects} and not exists $param{noaffects} and
 }
 
 # filter out included or excluded bugs
-
+my $bug_status =
+    get_status_and_filter(bugs => \@bugs,
+                          bugusertags => \%bugusertags,
+                          repeatmerged => $param{repeatmerged},
+                          include => $include,
+                          exclude => $exclude,
+                          (exists $param{dist})?(dist    => $param{dist}):(),);
+@bugs = keys %{$bug_status};
 
 if (defined $param{version}) {
      $title .= " at version $param{version}";
@@ -386,7 +411,10 @@ elsif (defined $param{dist}) {
 
 $title = html_escape($title);
 
-my @names; my @prior; my @order;
+my @names;
+# @prior contains the priority of the categories; numbers closer to
+# zero are shown nearer the top
+my @prior; my @order;
 determine_ordering(cats => \%cats,
                   param => \%param,
                   ordering => \$ordering,
@@ -396,27 +424,19 @@ determine_ordering(cats => \%cats,
                   order => \@order,
                  );
 
-# strip out duplicate bugs
-my %bugs;
-@bugs{@bugs} = @bugs;
-@bugs = keys %bugs;
-
 my $result = pkg_htmlizebugs(bugs => \@bugs,
-                            names => \@names,
-                            title => \@title,
-                            order => \@order,
-                            prior => \@prior,
-                            ordering => $ordering,
-                            bugusertags => \%bugusertags,
-                            bug_rev => $bug_rev,
-                            bug_order => $bug_order,
-                            repeatmerged => $param{repeatmerged},
-                            include => $include,
-                            exclude => $exclude,
-                            this => $this,
-                            options => \%param,
-                            (exists $param{dist})?(dist    => $param{dist}):(),
-                           );
+                             bug_status => $bug_status,
+                             names => \@names,
+                             title => \@title,
+                             order => \@order,
+                             prior => \@prior,
+                             ordering => $ordering,
+                             bugusertags => \%bugusertags,
+                             bug_rev => $bug_rev,
+                             bug_order => $bug_order,
+                             options => \%param,
+                             (exists $param{dist})?(dist    => $param{dist}):(),
+                            );
 
 print "Content-Type: text/html; charset=utf-8\n\n";
 
@@ -433,8 +453,8 @@ print "<H1>" . "$gProject$Archived $gBug report logs: $title" .
 
 my $showresult = 1;
 
-my $pkg = $param{package} if defined $param{package};
-my $src = $param{src} if defined $param{src};
+my ($pkg) = make_list($param{package}) if defined $param{package};
+my ($src) = make_list($param{src}) if defined $param{src};
 
 my $pseudodesc = getpseudodesc();
 if (defined $pseudodesc and defined $pkg and exists $pseudodesc->{$pkg}) {