X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FLog.pm;h=de639494f087788f11f48304fcdf271d494dab4e;hb=ab887f2c65e8ac828c6855f9904c81909256fc45;hp=20e13503441df9521913a4ed7308e8c0a21ea08e;hpb=46b3fa0d41486df933a92220b270c74f2204cdf4;p=debbugs.git diff --git a/Debbugs/Log.pm b/Debbugs/Log.pm index 20e1350..de63949 100644 --- a/Debbugs/Log.pm +++ b/Debbugs/Log.pm @@ -51,6 +51,11 @@ The Debbugs::Log module provides a convenient way for scripts to read and write the .log files used by debbugs to store the complete textual records of all bug transactions. +Debbugs::Log does not decode utf8 into perl's internal encoding or +encode into utf8 from perl's internal encoding. For html records and +all recips, this should probably be done. For other records, this should +not be needed. + =head2 The .log File Format .log files consist of a sequence of records, of one of the following four @@ -383,7 +388,14 @@ 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}); + # I am not sure if we really want to croak here; but this is + # almost certainly a bug if is_utf8 is on. + 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: $!"; @@ -427,7 +439,7 @@ Applies the log escape regex to the passed logfile. sub escape_log { my @log = @_; - return map { eval {$_ = is_utf8($_)?encode("utf8",$_,Encode::FB_CROAK):$_;}; s/^([\01-\07\030])/\030$1/gm; $_ } @log; + return map {s/^([\01-\07\030])/\030$1/gm; $_ } @log; }