From 59e7af124580f46bdb2dec21273607599ba1e8f9 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 28 Apr 2014 04:50:17 +0000 Subject: 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 --- lib/PublicInbox/Hval.pm | 4 ++-- lib/PublicInbox/View.pm | 11 ++++++----- public-inbox.cgi | 5 +++-- 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"; 'reply'; 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' ], -- cgit v1.2.3-24-ge0c7