From a384d6be75eb9ef0f43774f883993fa7d8ee1632 Mon Sep 17 00:00:00 2001 From: Ken Hornstein Date: Wed, 4 Apr 2012 23:33:40 -0400 Subject: [PATCH] Sigh. More corner cases to deal with! --- docs/contrib/replyfilter | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/docs/contrib/replyfilter b/docs/contrib/replyfilter index b74465a..36facd5 100755 --- a/docs/contrib/replyfilter +++ b/docs/contrib/replyfilter @@ -168,6 +168,7 @@ sub process_text (*$$;$) while (<$input>) { $ret = match_boundary($_, $boundary); if (defined $ret) { + binmode($input, ':encoding(us-ascii)'); return $ret; } print $quoteprefix, $_; @@ -179,7 +180,7 @@ sub process_text (*$$;$) # certainly US-ASCII # - binmode($input, ":encoding(us-ascii)"); + binmode($input, ':encoding(us-ascii)'); $decoder = find_decoder($encoding); if (! defined $decoder) { @@ -195,22 +196,28 @@ sub process_text (*$$;$) my $chardecode = find_encoding($charset); while (<$input>) { - my $line, $len; + my @lines, $len; last if ($ret = match_boundary($_, $boundary)); - $line = $chardecode->decode(&$decoder($_)); + @lines = split(/^/, $chardecode->decode(&$decoder($_))); if (substr($text[$#text], -1, 1) eq "\n") { - push @text, $line; + push @text, shift @lines; } else { - $text[$#text] .= $line; + $text[$#text] .= shift @lines; } if (($len = length($text[$#text])) > $maxline) { $maxline = $len; } + + if ($#lines > -1) { + push @text, @lines; + } } + binmode($input, ':encoding(us-ascii)'); + if (! defined $ret) { $ret = 'EOF'; } @@ -219,7 +226,9 @@ sub process_text (*$$;$) # # These are short enough; just output it now as-is # - print STDOUT @text; + foreach my $line (@text) { + print STDOUT $quoteprefix, $line; + } return $ret; } @@ -641,6 +650,8 @@ sub match_boundary($$) { my ($_, $boundary) = @_; + return if ! defined $boundary; + if (substr($_, 0, 2) eq '--') { s/[ \t\r\n]+\Z//; if ($_ eq "--$boundary") { -- 1.7.10.4