]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/WWW.pm
www: only emit ASCII chars in attachment filenames
[public-inbox.git] / lib / PublicInbox / WWW.pm
index 0f963dcbd907af3097ed5d0a8462c20acee3a0d9..50b6950cf6aca523e6dc8e708cab6bb193f28af8 100644 (file)
@@ -28,7 +28,7 @@ use PublicInbox::UserContent;
 our $INBOX_RE = qr!\A/([\w\-][\w\.\-]*)!;
 our $MID_RE = qr!([^/]+)!;
 our $END_RE = qr!(T/|t/|t\.mbox(?:\.gz)?|t\.atom|raw|)!;
-our $ATTACH_RE = qr!(\d[\.\d]*)-([[:alnum:]][\w\.-]+[[:alnum:]])!i;
+our $ATTACH_RE = qr!([0-9][0-9\.]*)-($PublicInbox::Hval::FN)!;
 our $OID_RE = qr![a-f0-9]{7,40}!;
 
 sub new {
@@ -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));
@@ -149,8 +149,11 @@ sub preload {
        require PublicInbox::MIME;
        require Digest::SHA;
        require POSIX;
-
-       foreach (qw(PublicInbox::Search PublicInbox::SearchView
+       eval {
+               require PublicInbox::Search;
+               PublicInbox::Search::load_xapian();
+       };
+       foreach (qw(PublicInbox::SearchView
                        PublicInbox::Mbox IO::Compress::Gzip
                        PublicInbox::NewsWWW)) {
                eval "require $_;";