gitweb: Fix handling of non-ASCII characters in inserted HTML files

Use new insert_file() subroutine to insert HTML chunks from external
files: $site_header, $home_text (by default indextext.html),
$site_footer, and $projectroot/$project/REAME.html.

All non-ASCII chars of those files will be broken by Perl IO layer
without decoding to utf8, so insert_file() does to_utf8() on each
printed line; alternate solution would be to open those files with
"binmode $fh, ':utf8'", or even all files with "use open qw(:std :utf8)".

Note that inserting README.html lost one of checks for simplicity.

Noticed-by: Tatsuki Sugiura <sugi@nemui.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jakub Narebski 2008-12-01 19:01:42 +01:00 committed by Junio C Hamano
parent 3273ebc759
commit 2dcb5e1ac8

View File

@ -2740,6 +2740,15 @@ sub get_file_owner {
return to_utf8($owner);
}
# assume that file exists
sub insert_file {
my $filename = shift;
open my $fd, '<', $filename;
print map(to_utf8, <$fd>);
close $fd;
}
## ......................................................................
## mimetype related functions
@ -2928,9 +2937,7 @@ EOF
"<body>\n";
if (-f $site_header) {
open (my $fd, $site_header);
print <$fd>;
close $fd;
insert_file($site_header);
}
print "<div class=\"page_header\">\n" .
@ -3017,9 +3024,7 @@ sub git_footer_html {
print "</div>\n"; # class="page_footer"
if (-f $site_footer) {
open (my $fd, $site_footer);
print <$fd>;
close $fd;
insert_file($site_footer);
}
print "</body>\n" .
@ -4358,9 +4363,7 @@ sub git_project_list {
git_header_html();
if (-f $home_text) {
print "<div class=\"index_include\">\n";
open (my $fd, $home_text);
print <$fd>;
close $fd;
insert_file($home_text);
print "</div>\n";
}
print $cgi->startform(-method => "get") .
@ -4472,13 +4475,10 @@ sub git_summary {
print "</table>\n";
if (-s "$projectroot/$project/README.html") {
if (open my $fd, "$projectroot/$project/README.html") {
print "<div class=\"title\">readme</div>\n" .
"<div class=\"readme\">\n";
print $_ while (<$fd>);
print "\n</div>\n"; # class="readme"
close $fd;
}
print "<div class=\"title\">readme</div>\n" .
"<div class=\"readme\">\n";
insert_file("$projectroot/$project/README.html");
print "\n</div>\n"; # class="readme"
}
# we need to request one more than 16 (0..15) to check if