about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2014-04-28 04:50:17 +0000
committerEric Wong <e@80x24.org>2014-04-28 04:51:46 +0000
commit59e7af124580f46bdb2dec21273607599ba1e8f9 (patch)
tree8c62802d9a9881d545a2d1493b9f8db4f5c6fbd8
parent31b13cdcb3ab2a4f9332f2aab10fdda7dbbe296c (diff)
downloadpublic-inbox-59e7af124580f46bdb2dec21273607599ba1e8f9.tar.gz
uri_escape => uri_escape_utf8
We should be able to deal with URIs with non-ASCII characters in
them.  I only found this problem when looking at archives with
non-English spam :x
-rw-r--r--lib/PublicInbox/Hval.pm4
-rw-r--r--lib/PublicInbox/View.pm11
-rwxr-xr-xpublic-inbox.cgi5
3 files changed, 11 insertions, 9 deletions
diff --git a/lib/PublicInbox/Hval.pm b/lib/PublicInbox/Hval.pm
index 1a83cf10..a93e8c24 100644
--- a/lib/PublicInbox/Hval.pm
+++ b/lib/PublicInbox/Hval.pm
@@ -7,7 +7,7 @@ use strict;
 use warnings;
 use fields qw(raw);
 use Encode qw(find_encoding);
-use URI::Escape qw(uri_escape);
+use URI::Escape qw(uri_escape_utf8);
 
 my $enc_ascii = find_encoding('us-ascii');
 
@@ -52,7 +52,7 @@ sub ascii_html {
 }
 
 sub as_html { ascii_html($_[0]->{raw}) }
-sub as_href { ascii_html(uri_escape($_[0]->{raw})) }
+sub as_href { ascii_html(uri_escape_utf8($_[0]->{raw})) }
 
 sub raw {
         if (defined $_[1]) {
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 663eff5b..c6ecee6e 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -4,7 +4,7 @@ package PublicInbox::View;
 use strict;
 use warnings;
 use PublicInbox::Hval;
-use URI::Escape qw/uri_escape/;
+use URI::Escape qw/uri_escape_utf8/;
 use Encode qw/find_encoding/;
 use Encode::MIME::Header;
 use Email::MIME::ContentType qw/parse_content_type/;
@@ -213,12 +213,13 @@ sub html_footer {
 
         my $subj = $mime->header('Subject') || '';
         $subj = "Re: $subj" unless $subj =~ /\bRe:/;
-        my $irp = uri_escape($mime->header_obj->header_raw('Message-ID') || '');
+        my $irp = uri_escape_utf8(
+                        $mime->header_obj->header_raw('Message-ID') || '');
         delete $cc{$to};
-        $to = uri_escape($to);
-        $subj = uri_escape($subj);
+        $to = uri_escape_utf8($to);
+        $subj = uri_escape_utf8($subj);
 
-        my $cc = uri_escape(join(',', values %cc));
+        my $cc = uri_escape_utf8(join(',', values %cc));
         my $href = "mailto:$to?In-Reply-To=$irp&Cc=${cc}&Subject=$subj";
 
         '<a href="' . ascii_html($href) . '">reply</a>';
diff --git a/public-inbox.cgi b/public-inbox.cgi
index 26b0fc61..87cc6943 100755
--- a/public-inbox.cgi
+++ b/public-inbox.cgi
@@ -15,7 +15,7 @@ use warnings;
 use CGI qw(:cgi -nosticky); # PSGI/FastCGI/mod_perl compat
 use Encode qw(find_encoding);
 use PublicInbox::Config;
-use URI::Escape qw(uri_escape uri_unescape);
+use URI::Escape qw(uri_escape_utf8 uri_unescape);
 our $enc_utf8 = find_encoding('UTF-8');
 our $LISTNAME_RE = qr!\A/([\w\.\-]+)!;
 our $pi_config;
@@ -165,7 +165,8 @@ sub get_mid_html {
         return r404() unless $x;
 
         require PublicInbox::View;
-        my $mid_href = PublicInbox::Hval::ascii_html(uri_escape($ctx->{mid}));
+        my $mid_href = PublicInbox::Hval::ascii_html(
+                                                uri_escape_utf8($ctx->{mid}));
         my $pfx = "../f/$mid_href.html";
         require Email::MIME;
         [ 200, [ 'Content-Type' => 'text/html' ],