about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-03-12 06:42:04 +0000
committerEric Wong <e@80x24.org>2016-03-12 06:49:52 +0000
commit476fc666c223f0fbe98ee1f66f7e282abf8adb56 (patch)
treeaa1c5e4afff648f22906a6fc0a0beb365194f967 /lib
parent7dd78012da81d48e5e73e56c3255895dfa9de1f5 (diff)
downloadpublic-inbox-476fc666c223f0fbe98ee1f66f7e282abf8adb56.tar.gz
reduce "PublicInbox::Hval->new_oneline" use
It's probably a bad idea to strip extraneous whitespace
from some headers as an extra space may convey useful
information.

Newlines don't seem to be preserved by Email::MIME or
Email::Simple anyways, so there's no danger in breaking
formatting.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/Feed.pm20
-rw-r--r--lib/PublicInbox/Hval.pm2
-rw-r--r--lib/PublicInbox/SearchView.pm23
-rw-r--r--lib/PublicInbox/View.pm23
4 files changed, 29 insertions, 39 deletions
diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm
index 47408535..e4831f6a 100644
--- a/lib/PublicInbox/Feed.pm
+++ b/lib/PublicInbox/Feed.pm
@@ -8,7 +8,7 @@ use warnings;
 use Email::Address;
 use Email::MIME;
 use Date::Parse qw(strptime);
-use PublicInbox::Hval;
+use PublicInbox::Hval qw/ascii_html/;
 use PublicInbox::Git;
 use PublicInbox::View;
 use PublicInbox::MID qw/mid_clean mid2path/;
@@ -38,8 +38,9 @@ sub generate_html_index {
 
 sub title_tag {
         my ($title) = @_;
+        $title =~ tr/\t\n / /s; # squeeze spaces
         # try to avoid the type attribute in title:
-        $title = PublicInbox::Hval->new_oneline($title)->as_html;
+        $title =~ ascii_html($title);
         my $type = index($title, '&') >= 0 ? "\ntype=\"html\"" : '';
         "<title$type>$title</title>";
 }
@@ -117,7 +118,6 @@ sub emit_html_index {
         my $feed_opts = get_feedopts($ctx);
 
         my $title = $feed_opts->{description} || '';
-        $title = PublicInbox::Hval->new_oneline($title)->as_html;
         my ($footer, $param, $last);
         my $state = { ctx => $ctx, seen => {}, anchor_idx => 0 };
         my $srch = $ctx->{srch};
@@ -295,11 +295,6 @@ sub get_feedopts {
         \%rv;
 }
 
-sub mime_header {
-        my ($mime, $name) = @_;
-        PublicInbox::Hval->new_oneline($mime->header($name))->raw;
-}
-
 sub feed_updated {
         my ($date, $ts) = @_;
         my @t = eval { strptime($date) } if defined $date;
@@ -328,14 +323,15 @@ sub add_to_feed {
         my $date = $header_obj->header('Date');
         my $updated = feed_updated($date);
 
-        my $title = mime_header($header_obj, 'Subject') or return 0;
+        my $title = $header_obj->header('Subject');
+        defined $title or return 0;
         $title = title_tag($title);
 
-        my $from = mime_header($header_obj, 'From') or return 0;
+        my $from = $header_obj->header('From') or return 0;
         my @from = Email::Address->parse($from) or return 0;
-        my $name = PublicInbox::Hval->new_oneline($from[0]->name)->as_html;
+        my $name = ascii_html($from[0]->name);
         my $email = $from[0]->address;
-        $email = PublicInbox::Hval->new_oneline($email)->as_html;
+        $email = ascii_html($email);
 
         if (delete $feed_opts->{emit_header}) {
                 $fh->write(atom_header($feed_opts, $title) . $updated);
diff --git a/lib/PublicInbox/Hval.pm b/lib/PublicInbox/Hval.pm
index a455884f..70bae7c6 100644
--- a/lib/PublicInbox/Hval.pm
+++ b/lib/PublicInbox/Hval.pm
@@ -9,6 +9,8 @@ use warnings;
 use Encode qw(find_encoding);
 use URI::Escape qw(uri_escape_utf8);
 use PublicInbox::MID qw/mid_clean/;
+use base qw/Exporter/;
+our @EXPORT_OK = qw/ascii_html/;
 
 # for user-generated content (UGC) which may have excessively long lines
 # and screw up rendering on some browsers.  This is the only CSS style
diff --git a/lib/PublicInbox/SearchView.pm b/lib/PublicInbox/SearchView.pm
index 36522a34..8283c1aa 100644
--- a/lib/PublicInbox/SearchView.pm
+++ b/lib/PublicInbox/SearchView.pm
@@ -6,7 +6,7 @@ package PublicInbox::SearchView;
 use strict;
 use warnings;
 use PublicInbox::SearchMsg;
-use PublicInbox::Hval;
+use PublicInbox::Hval qw/ascii_html/;
 use PublicInbox::View;
 use PublicInbox::MID qw(mid2path mid_clean mid_mime);
 use Email::MIME;
@@ -68,13 +68,12 @@ sub dump_mset {
                 my $rank = sprintf("%${pad}d", $m->get_rank + 1);
                 my $pct = $m->get_percent;
                 my $smsg = PublicInbox::SearchMsg->load_doc($m->get_document);
-                my $s = PublicInbox::Hval->new_oneline($smsg->subject);
-                my $f = $smsg->from_name;
-                $f = PublicInbox::Hval->new_oneline($f)->as_html;
+                my $s = ascii_html($smsg->subject);
+                my $f = ascii_html($smsg->from_name);
                 my $ts = PublicInbox::View::fmt_ts($smsg->ts);
                 my $mid = PublicInbox::Hval->new_msgid($smsg->mid)->as_href;
                 $$res .= qq{$rank. <b><a\nhref="$mid/">}.
-                        $s->as_html . "</a></b>\n";
+                        $s . "</a></b>\n";
                 $$res .= "$pfx  - by $f @ $ts UTC [$pct%]\n\n";
         }
 }
@@ -84,7 +83,7 @@ sub err_txt {
         my $u = '//xapian.org/docs/queryparser.html';
         $u = PublicInbox::Hval::prurl($ctx->{cgi}->{env}, $u);
         $err =~ s/^\s*Exception:\s*//; # bad word to show users :P
-        $err = PublicInbox::Hval->new_oneline($err)->as_html;
+        $err = ascii_html($err);
         "\n\nBad query: <b>$err</b>\n" .
                 qq{See <a\nhref="$u">$u</a> for Xapian query syntax};
 }
@@ -222,9 +221,7 @@ sub foot {
 
 sub html_start {
         my ($q, $ctx) = @_;
-        my $query = PublicInbox::Hval->new_oneline($q->{q});
-
-        my $qh = $query->as_html;
+        my $qh = ascii_html($q->{'q'});
         my $A = $q->qs_html(x => 'A', r => undef);
         my $res = '<html><head>' . PublicInbox::Hval::STYLE .
                 "<title>$qh - search results</title>" .
@@ -235,8 +232,8 @@ sub html_start {
 
         $res .= qq{<input\ntype=hidden\nname=r />} if $q->{r};
         if (my $x = $q->{x}) {
-                my $xh = PublicInbox::Hval->new_oneline($x)->as_html;
-                $res .= qq{<input\ntype=hidden\nname=x\nvalue="$xh" />};
+                $x = ascii_html($x);
+                $res .= qq{<input\ntype=hidden\nname=x\nvalue="$x" />};
         }
 
         $res .= qq{<input\ntype=submit\nvalue=search /></form>};
@@ -247,7 +244,7 @@ sub adump {
         my $fh = $cb->([ 200, ['Content-Type' => 'application/atom+xml']]);
         my $git = $ctx->{git} ||= PublicInbox::Git->new($ctx->{git_dir});
         my $feed_opts = PublicInbox::Feed::get_feedopts($ctx);
-        my $x = PublicInbox::Hval->new_oneline($q->{q})->as_html;
+        my $x = ascii_html($q->{'q'});
         $x = qq{$x - search results};
         $feed_opts->{atomurl} = $feed_opts->{url} . '?'. $q->qs_html;
         $feed_opts->{url} .= '?'. $q->qs_html(x => undef);
@@ -289,7 +286,7 @@ sub qs_html {
                 $self = $tmp;
         }
 
-        my $q = PublicInbox::Hval->new_oneline($self->{q})->as_href;
+        my $q = PublicInbox::Hval->new($self->{'q'})->as_href;
         $q =~ s/%20/+/g; # improve URL readability
         my $qs = "q=$q";
 
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 3522bf44..4058bee7 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -11,7 +11,7 @@ use Date::Parse qw/str2time/;
 use Encode qw/find_encoding/;
 use Encode::MIME::Header;
 use Email::MIME::ContentType qw/parse_content_type/;
-use PublicInbox::Hval;
+use PublicInbox::Hval qw/ascii_html/;
 use PublicInbox::Linkify;
 use PublicInbox::MID qw/mid_clean id_compress mid2path mid_mime/;
 require POSIX;
@@ -22,8 +22,6 @@ use constant MAX_TRUNC_LEN => 72;
 use constant T_ANCHOR => '#u';
 use constant INDENT => '  ';
 
-*ascii_html = *PublicInbox::Hval::ascii_html;
-
 my $enc_utf8 = find_encoding('UTF-8');
 
 # public functions:
@@ -50,10 +48,9 @@ sub msg_reply {
         $s = '(no subject)' if (!defined $s) || ($s eq '');
         my $f = $hdr->header('From');
         $f = '' unless defined $f;
-        $s = PublicInbox::Hval->new_oneline($s);
         my $mid = $hdr->header_raw('Message-ID');
         $mid = PublicInbox::Hval->new_msgid($mid);
-        my $t = $s->as_html;
+        my $t = ascii_html($s);
         my $se_url =
          'https://kernel.org/pub/software/scm/git/docs/git-send-email.html';
 
@@ -121,18 +118,18 @@ sub index_entry {
         $seen->{$id} = "#$id"; # save the anchor for children, later
 
         my $mid = PublicInbox::Hval->new_msgid($mid_raw);
-        my $from = PublicInbox::Hval->new_oneline($hdr->header('From'))->raw;
+        my $from = $hdr->header('From');
         my @from = Email::Address->parse($from);
         $from = $from[0]->name;
 
-        $from = PublicInbox::Hval->new_oneline($from)->as_html;
-        $subj = PublicInbox::Hval->new_oneline($subj)->as_html;
         my $root_anchor = $state->{root_anchor} || '';
         my $path = $root_anchor ? '../../' : '';
         my $href = $mid->as_href;
         my $irt = in_reply_to($hdr);
         my $parent_anchor = $seen->{anchor_for($irt)} if defined $irt;
 
+        $from = ascii_html($from);
+        $subj = ascii_html($subj);
         if ($srch) {
                 my $t = $ctx->{flat} ? 'T' : 't';
                 $subj = "<a\nhref=\"${path}$href/$t/#u\">$subj</a>";
@@ -414,7 +411,7 @@ sub headers_to_html_header {
         foreach my $h (qw(From To Cc Subject Date)) {
                 my $v = $hdr->header($h);
                 defined($v) && ($v ne '') or next;
-                $v = PublicInbox::Hval->new_oneline($v);
+                $v = PublicInbox::Hval->new($v);
 
                 if ($h eq 'From') {
                         my @from = Email::Address->parse($v->raw);
@@ -582,7 +579,7 @@ sub html_footer {
                 my $p = $ctx->{parent_msg};
                 my $next = $ctx->{next_msg};
                 if ($p) {
-                        $p = PublicInbox::Hval->new_oneline($p);
+                        $p = PublicInbox::Hval->new_msgid($p);
                         $p = $p->as_href;
                         $irt = "<a\nhref=\"$upfx$p/\">parent</a> ";
                 } else {
@@ -626,8 +623,7 @@ sub thread_html_head {
         my ($cb, $header, $state) = @_;
         $$cb = $$cb->([200, ['Content-Type'=> 'text/html; charset=UTF-8']]);
 
-        my $s = PublicInbox::Hval->new_oneline($header->header('Subject'));
-        $s = $s->as_html;
+        my $s = ascii_html($header->header('Subject'));
         $$cb->write("<html><head><title>$s</title>".
                 qq{<link\nrel=alternate\ntitle="Atom feed"\n} .
                 qq!href="../t.atom"\ntype="application/atom+xml"/>! .
@@ -781,9 +777,8 @@ sub _inline_header {
 
         my $cur = $state->{cur};
         my $mid = mid_clean($hdr->header_raw('Message-ID'));
-        my $f = $hdr->header('X-PI-From');
+        my $f = ascii_html($hdr->header('X-PI-From'));
         my $d = _msg_date($hdr);
-        $f = PublicInbox::Hval->new_oneline($f)->as_html;
         my $pfx = ' ' . $d . ' ' . indent_for($level);
         my $attr = $f;
         $state->{first_level} ||= $level;