]> Sergey Matveev's repositories - public-inbox.git/commitdiff
www: unescape '+' => ' ' before general URI unescape
authorEric Wong <e@80x24.org>
Thu, 16 May 2019 07:06:21 +0000 (07:06 +0000)
committerEric Wong <e@80x24.org>
Thu, 16 May 2019 07:10:55 +0000 (07:10 +0000)
This allows searching for terms with "+" in them properly.

lib/PublicInbox/WWW.pm

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