about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2020-01-01 10:38:55 +0000
committerEric Wong <e@80x24.org>2020-01-01 19:10:25 +0000
commit6348b9adcf8a7d4a455298f45f62338e148d691a (patch)
treec9ac7b8d419ac63e4db3191cd05c9018e240dbb7 /lib
parentf1d73de7cc202a70e97c31df236e1f23267a5f14 (diff)
downloadpublic-inbox-6348b9adcf8a7d4a455298f45f62338e148d691a.tar.gz
It'll be easier to reuse in future code.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/WWW.pm14
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm
index 251979d5..13b66ee6 100644
--- a/lib/PublicInbox/WWW.pm
+++ b/lib/PublicInbox/WWW.pm
@@ -42,15 +42,17 @@ sub run {
         PublicInbox::WWW->new->call($req->env);
 }
 
+# PATH_INFO is decoded, and we want the undecoded original
 my %path_re_cache;
-
-sub path_re ($) {
-        my $sn = $_[0]->{SCRIPT_NAME};
-        $path_re_cache{$sn} ||= do {
+sub path_info_raw ($) {
+        my ($env) = @_;
+        my $sn = $env->{SCRIPT_NAME};
+        my $re = $path_re_cache{$sn} ||= do {
                 $sn = '/'.$sn unless index($sn, '/') == 0;
                 $sn =~ s!/\z!!;
                 qr!\A(?:https?://[^/]+)?\Q$sn\E(/[^\?\#]+)!;
         };
+        $env->{REQUEST_URI} =~ $re ? $1 : $env->{PATH_INFO};
 }
 
 sub call {
@@ -67,9 +69,7 @@ sub call {
                 $k => $v;
         } split(/[&;]+/, $env->{QUERY_STRING});
 
-        # avoiding $env->{PATH_INFO} here since that's already decoded
-        my ($path_info) = ($env->{REQUEST_URI} =~ path_re($env));
-        $path_info //= $env->{PATH_INFO};
+        my $path_info = path_info_raw($env);
         my $method = $env->{REQUEST_METHOD};
 
         if ($method eq 'POST') {