summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Search
diff options
context:
space:
mode:
authorFrédéric Buclin <LpSolit@gmail.com>2014-04-16 22:03:04 +0200
committerFrédéric Buclin <LpSolit@gmail.com>2014-04-16 22:03:04 +0200
commit23bad39c2d516b7834b4fa95de054bf1ed769e8e (patch)
tree873190f4916a795d5b691ba5dc3192d276717f5d /Bugzilla/Search
parent060fa9003b9177a73f02ba5ea561bb5be306c74a (diff)
downloadbugzilla-23bad39c2d516b7834b4fa95de054bf1ed769e8e.tar.gz
bugzilla-23bad39c2d516b7834b4fa95de054bf1ed769e8e.tar.xz
Bug 997281: New QuickSearch operators can short-circuit each other depending on which ones are tested first
r/a=justdave
Diffstat (limited to 'Bugzilla/Search')
-rw-r--r--Bugzilla/Search/Quicksearch.pm6
1 files changed, 5 insertions, 1 deletions
diff --git a/Bugzilla/Search/Quicksearch.pm b/Bugzilla/Search/Quicksearch.pm
index 1a8823488..98e8a6482 100644
--- a/Bugzilla/Search/Quicksearch.pm
+++ b/Bugzilla/Search/Quicksearch.pm
@@ -402,7 +402,11 @@ sub _handle_field_names {
# Generic field1,field2,field3:value1,value2 notation.
# We have to correctly ignore commas and colons in quotes.
- foreach my $symbol (keys %{ OPERATOR_SYMBOLS() }) {
+ # Longer operators must be tested first as we don't want single character
+ # operators such as <, > and = to be tested before <=, >= and !=.
+ my @operators = sort { length($b) <=> length($a) } keys %{ OPERATOR_SYMBOLS() };
+
+ foreach my $symbol (@operators) {
my @field_values = _parse_line($symbol, 1, $or_operand);
next unless scalar @field_values == 2;
my @fields = _parse_line(',', 1, $field_values[0]);