]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 850639: Set an upper limit on the number of nodes the dependency graph will display
authorByron Jones <bjones@mozilla.com>
Thu, 28 Mar 2013 06:16:58 +0000 (14:16 +0800)
committerByron Jones <bjones@mozilla.com>
Thu, 28 Mar 2013 06:16:58 +0000 (14:16 +0800)
r=LpSolit, a=LpSolit

Bugzilla/Constants.pm
showdependencygraph.cgi
template/en/default/global/user-error.html.tmpl

index 212816a052f6f62051b0cf6d77fe74c9a5a6938a..765dacd99eb9d83616f49fe9d1b3f13c48c10dc1 100644 (file)
@@ -167,6 +167,7 @@ use Memoize;
     MAX_POSSIBLE_DUPLICATES
     MAX_ATTACH_FILENAME_LENGTH
     MAX_QUIP_LENGTH
+    MAX_WEBDOT_BUGS
 
     PASSWORD_DIGEST_ALGORITHM
     PASSWORD_SALT_LENGTH
@@ -570,6 +571,9 @@ use constant MAX_ATTACH_FILENAME_LENGTH => 255;
 # Maximum length of a quip.
 use constant MAX_QUIP_LENGTH => 512;
 
+# Maximum number of bugs to display in a dependency graph
+use constant MAX_WEBDOT_BUGS => 2000;
+
 # This is the name of the algorithm used to hash passwords before storing
 # them in the database. This can be any string that is valid to pass to
 # Perl's "Digest" module. Note that if you change this, it won't take
index 2f10551a15dd193cc0dffc89eef42a32d809dfc7..838402a8ebea4fddddd1275f3302fcb4a4f1955c 100755 (executable)
@@ -29,7 +29,7 @@ my $vars = {};
 # performance.
 my $dbh = Bugzilla->switch_to_shadow_db();
 
-local our (%seen, %edgesdone, %bugtitles);
+our (%seen, %edgesdone, %bugtitles, $bug_count);
 
 # CreateImagemap: This sub grabs a local filename as a parameter, reads the 
 # dot-generated image map datafile residing in that file and turns it into
@@ -76,6 +76,7 @@ sub AddLink {
     if (!exists $edgesdone{$key}) {
         $edgesdone{$key} = 1;
         print $fh "$dependson -> $blocked\n";
+        $bug_count++;
         $seen{$blocked} = 1;
         $seen{$dependson} = 1;
     }
@@ -108,10 +109,10 @@ chmod Bugzilla::Install::Filesystem::CGI_WRITE, $filename
 my $urlbase = Bugzilla->params->{'urlbase'};
 
 print $fh "digraph G {";
-print $fh qq{
+print $fh qq(
 graph [URL="${urlbase}query.cgi", rankdir=$rankdir]
 node [URL="${urlbase}show_bug.cgi?id=\\N", style=filled, color=lightgrey]
-};
+);
 
 my %baselist;
 
@@ -224,6 +225,11 @@ foreach my $k (@bug_ids) {
 print $fh "}\n";
 close $fh;
 
+if ($bug_count > MAX_WEBDOT_BUGS) {
+    unlink($filename);
+    ThrowUserError("webdot_too_large");
+}
+
 my $webdotbase = Bugzilla->params->{'webdotbase'};
 
 if ($webdotbase =~ /^https?:/) {
index 6d03eaa4bcf0ab385d0a59775659cca4800212a1..58d3473761596cc135f5d968273ecacc7ce1fe3c 100644 (file)
     Sorry, but you are not allowed to (un)mark comments or attachments
     as private.
 
+  [% ELSIF error == "webdot_too_large" %]
+    [% title = "Dependency Graph Too Large" %]
+    The dependency graph contains too many [% terms.bugs %] to display (more
+    than [% constants.MAX_WEBDOT_BUGS FILTER html %] [%+ terms.bugs %]).
+
   [% ELSIF error == "wrong_token_for_cancelling_email_change" %]
     [% title = "Wrong Token" %]
     That token cannot be used to cancel an email address change.