summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlpsolit%gmail.com <>2007-07-20 19:55:55 +0200
committerlpsolit%gmail.com <>2007-07-20 19:55:55 +0200
commit1b984c1173997419539b419e68ce893fc0dee4ee (patch)
tree0e775e8f3e3f30328429b63cfddfb88628f543ea
parent92edb9c70d2297d0588a60ba700bd29c9670bb98 (diff)
downloadbugzilla-1b984c1173997419539b419e68ce893fc0dee4ee.tar.gz
bugzilla-1b984c1173997419539b419e68ce893fc0dee4ee.tar.xz
Bug 365082: QuickSearch using unknown field makes Bugzilla hang - Patch by Teemu Mannermaa <wicked@sci.fi> r/a=LpSolit
-rw-r--r--Bugzilla/Search/Quicksearch.pm17
-rw-r--r--template/en/default/global/user-error.html.tmpl14
2 files changed, 27 insertions, 4 deletions
diff --git a/Bugzilla/Search/Quicksearch.pm b/Bugzilla/Search/Quicksearch.pm
index e8664005c..884479e50 100644
--- a/Bugzilla/Search/Quicksearch.pm
+++ b/Bugzilla/Search/Quicksearch.pm
@@ -170,6 +170,7 @@ sub quicksearch {
$#words < Bugzilla->params->{'quicksearch_comment_cutoff'};
my @openStates = BUG_STATE_OPEN;
my @closedStates;
+ my @unknownFields;
my (%states, %resolutions);
foreach (@$legal_statuses) {
@@ -286,8 +287,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);
@@ -392,8 +396,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 072a10a56..658532766 100644
--- a/template/en/default/global/user-error.html.tmpl
+++ b/template/en/default/global/user-error.html.tmpl
@@ -1295,6 +1295,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 <code>[% fields.first FILTER html %]</code> is not a known field.
+ [% ELSE %]
+ Fields
+ [% FOREACH field = fields.unique.sort %]
+ <code>[% field FILTER html %]</code>
+ [% ', ' UNLESS loop.last() %]
+ [% END %]
+ are not known fields.
+ [% END %]
+ The legal field names are <a href="page.cgi?id=quicksearchhack.html">listed here</a>.
+
[% ELSIF error == "reassign_to_empty" %]
[% title = "Illegal Reassignment" %]
To reassign [% terms.abug %], you must provide an address for