X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FLog.pm;h=551fd392a36fafea8b452377e30f19dbdc20d266;hb=759994a97a3e747305961b38eecd825d910e0c59;hp=2ae7af7b919705b1e859f55cfc686a0741ab980c;hpb=ce7050c06e80846da12fcb947bc4d583d9e402fa;p=debbugs.git diff --git a/Debbugs/Log.pm b/Debbugs/Log.pm index 2ae7af7..551fd39 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 is_utf8); +use Encode qw(encode encode_utf8 is_utf8); =head1 NAME @@ -390,8 +390,12 @@ sub write_log_records croak "record type '$type' with no text field" unless defined $record->{text}; # I am not sure if we really want to croak here; but this is # almost certainly a bug if is_utf8 is on. - # croak "probably wrong encoding" if is_utf8($record->{text}); - my ($text) = escape_log($record->{text}); + my $text = $record->{text}; + if (is_utf8($text)) { + carp('Record text was in the wrong encoding (perl internal instead of utf8 octets)'); + $text = encode_utf8($text) + } + ($text) = escape_log($text); if ($type eq 'autocheck') { print {$logfh} "\01\n$text\03\n" or die "Unable to write to logfile: $!"; @@ -401,6 +405,15 @@ sub write_log_records if (defined $recips) { croak "recips not undef or array" unless ref($recips) eq 'ARRAY'; + my $wrong_encoding = 0; + my @recips = + map { if (is_utf8($_)) { + $wrong_encoding=1; + encode_utf8($_); + } else { + $_; + }} @$recips; + carp('Recipients was in the wrong encoding (perl internal instead of utf8 octets') if $wrong_encoding; print {$logfh} join("\04", @$recips) . "\n" or die "Unable to write to logfile: $!"; } else {