From: Don Armstrong Date: Sun, 8 Jul 2012 03:04:29 +0000 (-0700) Subject: Merge branch 'don/processencoding' of git+ssh://git.donarmstrong.com/srv/git/debbugs... X-Git-Tag: release/2.6.0~376 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=4ac94f292bfbf36863795ed9d695be7ad2b5b344;hp=de30c269182d7c865eb3d1258387485dd5131819;p=debbugs.git Merge branch 'don/processencoding' of git+ssh://git.donarmstrong.com/srv/git/debbugs into don/processencoding --- diff --git a/Debbugs/Log.pm b/Debbugs/Log.pm index e58d84a..96748b7 100644 --- a/Debbugs/Log.pm +++ b/Debbugs/Log.pm @@ -39,7 +39,7 @@ use Carp; use Debbugs::Common qw(getbuglocation getbugcomponent make_list); use Params::Validate qw(:types validate_with); -use Encode qw(encode); +use Encode qw(encode is_utf8); =head1 NAME @@ -428,7 +428,7 @@ Applies the log escape regex to the passed logfile. sub escape_log { my @log = @_; - return map { eval {$_ = encode("utf8",$_,Encode::FB_CROAK)}; s/^([\01-\07\030])/\030$1/gm; $_ } @log; + return map { eval {$_ = is_utf8($_)?encode("utf8",$_,Encode::FB_CROAK):$_;}; s/^([\01-\07\030])/\030$1/gm; $_ } @log; } diff --git a/Debbugs/MIME.pm b/Debbugs/MIME.pm index bc47ca3..05534e3 100644 --- a/Debbugs/MIME.pm +++ b/Debbugs/MIME.pm @@ -314,7 +314,7 @@ sub encode_rfc1522 { if (length $encoded > 75) { # Turn utf8 into the internal perl representation # so . is a character, not a byte. - my $tempstr = decode_utf8($word,Encode::FB_DEFAULT); + my $tempstr = is_utf8($word)?$word:decode_utf8($word,Encode::FB_DEFAULT); my @encoded; # Strip it into 10 character long segments, and encode # the segments diff --git a/Debbugs/Mail.pm b/Debbugs/Mail.pm index 1366be3..d26c860 100644 --- a/Debbugs/Mail.pm +++ b/Debbugs/Mail.pm @@ -357,11 +357,6 @@ sub send_mail_message{ if ($param{encode_headers}) { $param{message} = encode_headers($param{message}); } - eval { - if (is_utf8($param{message})) { - $param{message} = encode('utf8',$param{message}); - } - }; # First, try to send the message as is. eval { diff --git a/t/13_utf8_mail.t b/t/13_utf8_mail.t new file mode 100644 index 0000000..5885984 --- /dev/null +++ b/t/13_utf8_mail.t @@ -0,0 +1,134 @@ +# -*- mode: cperl;-*- +# $Id: 05_mail.t,v 1.1 2005/08/17 21:46:17 don Exp $ + +use Test::More tests => 12; + +use warnings; +use strict; + +# Here, we're going to shoot messages through a set of things that can +# happen. + +# First, we're going to send mesages to receive. +# To do so, we'll first send a message to submit, +# then send messages to the newly created bugnumber. + +use IO::File; +use File::Temp qw(tempdir); +use Cwd qw(getcwd); +use Debbugs::MIME qw(create_mime_message); +use File::Basename qw(dirname basename); +# The test functions are placed here to make things easier +use lib qw(t/lib); +use DebbugsTest qw(:all); +use Data::Dumper; +use Encode qw(decode encode); + +# HTTP::Server:::Simple defines a SIG{CHLD} handler that breaks system; undef it here. +$SIG{CHLD} = sub {}; +my %config; +eval { + %config = create_debbugs_configuration(debug => exists $ENV{DEBUG}?$ENV{DEBUG}:0); +}; +if ($@) { + BAIL_OUT($@); +} + +my $sendmail_dir = $config{sendmail_dir}; +my $spool_dir = $config{spool_dir}; +my $config_dir = $config{config_dir}; + +END{ + if ($ENV{DEBUG}) { + diag("spool_dir: $spool_dir\n"); + diag("config_dir: $config_dir\n"); + diag("sendmail_dir: $sendmail_dir\n"); + } +} + +# We're going to use create mime message to create these messages, and +# then just send them to receive. + +send_message(to=>'submit@bugs.something', + headers => [To => 'submit@bugs.something', + From => 'foo@bugs.something', + Subject => 'Submiting a bug', + ], + body => < [{Type=>"text/plain",Charset=>"utf-8",Data=>< '1@bugs.something', + headers => [To => '1@bugs.something', + From => 'foo@bugs.something', + Subject => 'Sending a message to a bug', + ], + body => < 'control@bugs.something', + headers => [To => 'control@bugs.something', + From => 'foo@bugs.something', + Subject => 'Munging a bug', + ], + body => <1); +ok($status->{subject} eq 'ütff8 title encoding test','bug 1 retitled'); +ok($status->{severity} eq 'wishlist','bug 1 wishlisted'); +ok(system('sh','-c','[ $(grep "encoding test" '.$spool_dir.'/db-h/01/1.log|grep -v "ütff8"|wc -l) -eq 0 ]') == 0, + 'Control messages escaped properly'); + diff --git a/t/lib/DebbugsTest.pm b/t/lib/DebbugsTest.pm index 4e510f6..253f1d7 100644 --- a/t/lib/DebbugsTest.pm +++ b/t/lib/DebbugsTest.pm @@ -145,6 +145,9 @@ sub send_message{ }, body => {type => SCALAR, }, + attachments => {type => ARRAYREF, + default => [], + }, run_processall =>{type => BOOLEAN, default => 1, }, @@ -158,7 +161,9 @@ sub send_message{ my $pid = open3($wfd,$rfd,$rfd,'scripts/receive') or die "Unable to start receive: $!"; print {$wfd} create_mime_message($param{headers}, - $param{body}) or die "Unable to to print to receive"; + $param{body}, + $param{attachments}) or + die "Unable to to print to receive"; close($wfd) or die "Unable to close receive"; my $err = $? >> 8; my $childpid = waitpid($pid,0);