]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 556579: Back out the patch from bug 554819, because it caused special
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Fri, 23 Jul 2010 01:29:24 +0000 (18:29 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Fri, 23 Jul 2010 01:29:24 +0000 (18:29 -0700)
characters in quoted strings to be interpreted instead of passed along.
r=LpSolit, a=LpSolit

Bugzilla/Search/Quicksearch.pm

index 1a287767495419fee92e4586d09d4c7d49556fe3..df4383ef92be02d25627cdfe4306f5d1aeaa88e3 100644 (file)
@@ -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;