X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FLog.pm;h=96748b7ee401813e6a096bf825a33122caca9daf;hb=4ac94f292bfbf36863795ed9d695be7ad2b5b344;hp=e64d2369a371b131466dd7f8d7fdf3e4aae4e73b;hpb=764cf056fc8d74fd4704bb90ba352d5d8ea5d55d;p=debbugs.git diff --git a/Debbugs/Log.pm b/Debbugs/Log.pm index e64d236..96748b7 100644 --- a/Debbugs/Log.pm +++ b/Debbugs/Log.pm @@ -39,6 +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); =head1 NAME @@ -200,6 +201,7 @@ sub new die "Unable to open bug log $bug_log for reading: $!"; } + binmode($self->{logfh},':utf8'); $self->{state} = 'kill-init'; $self->{linenum} = 0; return $self; @@ -368,7 +370,7 @@ sub write_log_records $logfh = $param{logfh} } elsif (exists $param{log_name}) { - $logfh = IO::File->new($param{log_name},'w') or + $logfh = IO::File->new(">>$param{log_name}") or die "Unable to open bug log $param{log_name} for writing: $!"; } elsif (exists $param{bug_num}) { @@ -381,8 +383,8 @@ sub write_log_records for my $record (@records) { my $type = $record->{type}; + croak "record type '$type' with no text field" unless defined $record->{text}; my ($text) = escape_log($record->{text}); - croak "record type '$type' with no text field" unless defined $text; if ($type eq 'autocheck') { print {$logfh} "\01\n$text\03\n" or die "Unable to write to logfile: $!"; @@ -426,7 +428,7 @@ Applies the log escape regex to the passed logfile. sub escape_log { my @log = @_; - return map { 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; }