X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FText.pm;h=353392013c90e621780d1febc76290e40954d075;hb=867420593c939cf9585bd42f558778ad598076b9;hp=5c5cff8b9bc6a82a4179b8276a68d05f9ce57a1a;hpb=59414ce84e177a34d1327ba10b8c8e06d3d07d03;p=debbugs.git diff --git a/Debbugs/Text.pm b/Debbugs/Text.pm index 5c5cff8..3533920 100644 --- a/Debbugs/Text.pm +++ b/Debbugs/Text.pm @@ -141,6 +141,7 @@ sub fill_in_template{ ref(\$param{template}) eq 'GLOB') { $tt_type = 'FILE_HANDLE'; $tt_source = $param{template}; + binmode($tt_source,":encoding(UTF-8)"); } elsif (ref($param{template}) eq 'SCALAR') { $tt_type = 'STRING'; @@ -193,17 +194,23 @@ sub fill_in_template{ my $tt; if ($tt_type eq 'FILE' and defined $tt_templates{$tt_source} and + ($tt_templates{$tt_source}{mtime} + 60) < time and (stat $tt_source)[9] <= $tt_templates{$tt_source}{mtime} ) { $tt = $tt_templates{$tt_source}{template}; } else { + my $passed_source = $tt_source; + my $passed_type = $tt_type; if ($tt_type eq 'FILE') { $tt_templates{$tt_source}{mtime} = (stat $tt_source)[9]; + $passed_source = IO::File->new($tt_source,'r'); + binmode($passed_source,":encoding(UTF-8)"); + $passed_type = 'FILEHANDLE'; } - $tt = Text::Template->new(TYPE => $tt_type, - SOURCE => $tt_source, + $tt = Text::Template->new(TYPE => $passed_type, + SOURCE => $passed_source, UNTAINT => 1, ); if ($tt_type eq 'FILE') { @@ -216,7 +223,8 @@ sub fill_in_template{ my $ret = $tt->fill_in(#SAFE => $safe, PACKAGE => 'DTT', HASH => {%{$param{variables}//{}}, - %{$param{hole_var}//{}}, + (map {my $t = $_; $t =~ s/^\&//; ($t => $param{hole_var}{$_})} + keys %{$param{hole_var}//{}}), include => \&Debbugs::Text::include, config => \%config, },