]> Sergey Matveev's repositories - public-inbox.git/commitdiff
hval: ascii_html: drop CRLF => LF conversion
authorEric Wong <e@yhbt.net>
Mon, 24 Feb 2020 07:33:26 +0000 (07:33 +0000)
committerEric Wong <e@yhbt.net>
Mon, 24 Feb 2020 18:30:11 +0000 (18:30 +0000)
Instead, we add CRLF conversion to the only remaining place
which needs it, ViewVCS.  This save many redundant ops in in
many places.

The only other place where this mattered was in
View::add_text_body, but we already started doing CRLF
conversions when we added diff parsing and link generation for
ViewVCS.  Otherwise, all other places we used this was for
header viewing and Email::MIME doesn't preserve CRLF in headers.

lib/PublicInbox/Hval.pm
lib/PublicInbox/ViewVCS.pm
t/plack.t

index 5f7ab513b11d9d3f0cc61459153c6c067f8c0f7d..79005d2109499aae4b4abe6cf216a7583c909ad1 100644 (file)
@@ -55,7 +55,6 @@ sub src_escape ($) {
 
 sub ascii_html {
        my ($s) = @_;
-       $s =~ s/\r\n/\n/sg; # fixup bad line endings
        $s =~ s/([<>&'"\x7f\x00-\x1f])/$xhtml_map{$1}/sge;
        $enc_ascii->encode($s, Encode::HTMLCREF);
 }
index 1379bd583cc5cd43427a0ef882e6d6eabc046676..2f8e1c4f6531413e8bec34b5929678bdf8f86ab8 100644 (file)
@@ -164,7 +164,7 @@ sub solve_result {
 
        # TODO: detect + convert to ensure validity
        utf8::decode($$blob);
-       my $nl = ($$blob =~ tr/\n/\n/);
+       my $nl = ($$blob =~ s/\r?\n/\n/sg);
        my $pad = length($nl);
 
        $l->linkify_1($$blob);
index fe767aed826cfc02fc1a4d245fee9a4d32fac452..ea31879285fd6d89268677a6eb6941c11fffc6e7 100644 (file)
--- a/t/plack.t
+++ b/t/plack.t
@@ -109,6 +109,23 @@ EOF
        like($mime->body_raw, qr/hi =3D bye=/, 'our test used QP correctly');
        $im->add($mime);
 
+       my $crlf = <<EOF;
+From: Me
+  <me\@example.com>
+To: $addr
+Message-Id: <crlf\@example.com>
+Subject: carriage
+  return
+  in
+  long
+  subject
+Date: Fri, 02 Oct 1993 00:00:00 +0000
+
+:(
+EOF
+       $crlf =~ s/\n/\r\n/sg;
+       $im->add(Email::MIME->new($crlf));
+
        $im->done;
 }
 
@@ -120,6 +137,16 @@ test_psgi($app, sub {
        }
 });
 
+test_psgi($app, sub {
+       my ($cb) = @_;
+       my $res = $cb->(GET('http://example.com/test/crlf@example.com/'));
+       is($res->code, 200, 'retrieved CRLF as HTML');
+       unlike($res->content, qr/\r/, 'no CR in HTML');
+       $res = $cb->(GET('http://example.com/test/crlf@example.com/raw'));
+       is($res->code, 200, 'retrieved CRLF raw');
+       like($res->content, qr/\r/, 'CR preserved in raw message');
+});
+
 # redirect with newsgroup
 test_psgi($app, sub {
        my ($cb) = @_;