diff options
author | Max Kanat-Alexander <mkanat@bugzilla.org> | 2010-07-23 03:28:11 +0200 |
---|---|---|
committer | Max Kanat-Alexander <mkanat@bugzilla.org> | 2010-07-23 03:28:11 +0200 |
commit | e11091837644b7d5c2ddbea657548ae222c2884b (patch) | |
tree | 74eaa45a5ddb1a8418124a5b5d0ce0870a5a9e2b /Bugzilla/Search | |
parent | ddb5db354ac1b55ce99c9d0e977a2a63099f4c21 (diff) | |
download | bugzilla-e11091837644b7d5c2ddbea657548ae222c2884b.tar.gz bugzilla-e11091837644b7d5c2ddbea657548ae222c2884b.tar.xz |
Bug 556579: Back out the patch from bug 554819, because it caused special
characters in quoted strings to be interpreted instead of passed along.
r=LpSolit, a=LpSolit
Diffstat (limited to 'Bugzilla/Search')
-rw-r--r-- | Bugzilla/Search/Quicksearch.pm | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/Bugzilla/Search/Quicksearch.pm b/Bugzilla/Search/Quicksearch.pm index 1a2877674..df4383ef9 100644 --- a/Bugzilla/Search/Quicksearch.pm +++ b/Bugzilla/Search/Quicksearch.pm @@ -30,8 +30,6 @@ use Bugzilla::Status; use Bugzilla::Field; use Bugzilla::Util; -use Text::ParseWords qw(quotewords); - use base qw(Exporter); @Bugzilla::Search::Quicksearch::EXPORT = qw(quicksearch); @@ -149,7 +147,7 @@ sub quicksearch { $searchstring =~ s/\s+OR\s+/|/g; $searchstring =~ s/\s+NOT\s+/ -/g; - my @words = quotewords('\s+', 0, $searchstring); + my @words = splitString($searchstring); _handle_status_and_resolution(\@words); my (@unknownFields, %ambiguous_fields); @@ -494,6 +492,36 @@ sub _handle_urls { # Helpers ########################################################################### +# Split string on whitespace, retaining quoted strings as one +sub splitString { + my $string = shift; + my @quoteparts; + my @parts; + my $i = 0; + + # Now split on quote sign; be tolerant about unclosed quotes + @quoteparts = split(/"/, $string); + foreach my $part (@quoteparts) { + # After every odd quote, quote special chars + $part = url_quote($part) if $i++ % 2; + } + # Join again + $string = join('"', @quoteparts); + + # Now split on unescaped whitespace + @parts = split(/\s+/, $string); + foreach (@parts) { + # Protect plus signs from becoming a blank. + # If "+" appears as the first character, leave it alone + # as it has a special meaning. Strings which start with + # "+" must be quoted. + s/(?<!^)\+/%2B/g; + # Remove quotes + s/"//g; + } + return @parts; +} + # Expand found prefixes to states or resolutions sub matchPrefixes { my $hr_states = shift; @@ -552,7 +580,7 @@ sub makeChart { my $cgi = Bugzilla->cgi; $cgi->param("field$expr", $field); $cgi->param("type$expr", $type); - $cgi->param("value$expr", $value); + $cgi->param("value$expr", url_decode($value)); } 1; |