about summary refs log tree commit homepage
path: root/lib/PublicInbox/WWW.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-05-16 07:06:21 +0000
committerEric Wong <e@80x24.org>2019-05-16 07:10:55 +0000
commit1ea73ea22b4d2ea3a9c123753bdc58f9d480e188 (patch)
tree52c69fb8e2a585315a09f120ea2a8a193462f0b9 /lib/PublicInbox/WWW.pm
parentfee27210002cc343e4e99e3a8b10ac9fa5f0f26a (diff)
downloadpublic-inbox-1ea73ea22b4d2ea3a9c123753bdc58f9d480e188.tar.gz
www: unescape '+' => ' ' before general URI unescape
This allows searching for terms with "+" in them properly.
Diffstat (limited to 'lib/PublicInbox/WWW.pm')
-rw-r--r--lib/PublicInbox/WWW.pm12
1 files changed, 6 insertions, 6 deletions
diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm
index 1f3ca157..1c349d76 100644
--- a/lib/PublicInbox/WWW.pm
+++ b/lib/PublicInbox/WWW.pm
@@ -59,14 +59,14 @@ sub call {
         my $ctx = { env => $env, www => $self };
 
         # we don't care about multi-value
-        my %qp = map {
+        %{$ctx->{qp}} = map {
                 utf8::decode($_);
-                my ($k, $v) = split('=', uri_unescape($_), 2);
-                $v = '' unless defined $v;
-                $v =~ tr/+/ /;
-                ($k, $v)
+                tr/+/ /;
+                my ($k, $v) = split('=', $_, 2);
+                $v = uri_unescape($v // '');
+                # none of the keys we care about will need escaping
+                $k => $v;
         } split(/[&;]+/, $env->{QUERY_STRING});
-        $ctx->{qp} = \%qp;
 
         # avoiding $env->{PATH_INFO} here since that's already decoded
         my ($path_info) = ($env->{REQUEST_URI} =~ path_re($env));