Oops, we must unescape each key=value pair in a QUERY_STRING
individually; otherwise we cannot interpret '&' or ';' in
query parameter values.
---
 lib/PublicInbox/WWW.pm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm
index 26cd571..60cb443 100644
--- a/lib/PublicInbox/WWW.pm
+++ b/lib/PublicInbox/WWW.pm
@@ -41,11 +41,11 @@ sub call {
 
        # we don't care about multi-value
        my %qp = map {
-               my ($k, $v) = split('=', $_, 2);
+               my ($k, $v) = split('=', uri_unescape($_), 2);
                $v = '' unless defined $v;
                $v =~ tr/+/ /;
                ($k, $v)
-       } split(/[&;]/, uri_unescape($env->{QUERY_STRING}));
+       } split(/[&;]/, $env->{QUERY_STRING});
        $ctx->{qp} = \%qp;
 
        my $path_info = $env->{PATH_INFO};
-- 
EW

--
unsubscribe: [email protected]
archive: https://public-inbox.org/meta/

Reply via email to