From: lpsolit%gmail.com <> Date: Fri, 20 Jul 2007 17:57:47 +0000 (+0000) Subject: Bug 365082: QuickSearch using unknown field makes Bugzilla hang - Patch by Teemu... X-Git-Tag: bugzilla-3.0.1~44 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0ead7346a2a8c5a87aa4ba8bb560d039a282cbfd;p=thirdparty%2Fbugzilla.git Bug 365082: QuickSearch using unknown field makes Bugzilla hang - Patch by Teemu Mannermaa r/a=LpSolit --- diff --git a/Bugzilla/Search/Quicksearch.pm b/Bugzilla/Search/Quicksearch.pm index 83746ed5f0..3328e1f559 100644 --- a/Bugzilla/Search/Quicksearch.pm +++ b/Bugzilla/Search/Quicksearch.pm @@ -163,6 +163,7 @@ sub quicksearch { $#words < Bugzilla->params->{'quicksearch_comment_cutoff'}; my @openStates = BUG_STATE_OPEN; my @closedStates; + my @unknownFields; my (%states, %resolutions); foreach (@$legal_statuses) { @@ -273,8 +274,11 @@ sub quicksearch { my @fields = split(/,/, $1); my @values = split(/,/, $2); foreach my $field (@fields) { - # Be tolerant about unknown fields - next unless defined(MAPPINGS->{$field}); + # Skip and record any unknown fields + if (!defined(MAPPINGS->{$field})) { + push(@unknownFields, $field); + next; + } $field = MAPPINGS->{$field}; foreach (@values) { addChart($field, 'substring', $_, $negate); @@ -376,8 +380,13 @@ sub quicksearch { $or = 0; } # foreach (@words) - # We've been very tolerant about invalid queries, so all that's left - # may be an empty query. + # Inform user about any unknown fields + if (scalar(@unknownFields)) { + ThrowUserError("quicksearch_unknown_field", + { fields => \@unknownFields }); + } + + # Make sure we have some query terms left scalar($cgi->param())>0 || ThrowUserError("buglist_parameters_required"); } diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl index e6871826fd..21091d7cc3 100644 --- a/template/en/default/global/user-error.html.tmpl +++ b/template/en/default/global/user-error.html.tmpl @@ -1268,6 +1268,20 @@ [% title = "Query Name Too Long" %] The name of the query must be less than 64 characters long. + [% ELSIF error == "quicksearch_unknown_field" %] + [% title = "Unknown QuickSearch Field" %] + [% IF fields.unique.size == 1 %] + Field [% fields.first FILTER html %] is not a known field. + [% ELSE %] + Fields + [% FOREACH field = fields.unique.sort %] + [% field FILTER html %] + [% ', ' UNLESS loop.last() %] + [% END %] + are not known fields. + [% END %] + The legal field names are listed here. + [% ELSIF error == "reassign_to_empty" %] [% title = "Illegal Reassignment" %] To reassign [% terms.abug %], you must provide an address for