Fix UTF-8 mangling on patch and commitdiff_plain
[gitweb] / gitweb.cgi
index 91047b0e0ba37560264572f5f43ca4d0e8ea89ec..5af873c02352cf67a25ef11e6a9301df0f19ee9e 100755 (executable)
@@ -4086,11 +4086,11 @@ sub print_feed_meta {
        } else {
                printf('<link rel="alternate" title="%s projects list" '.
                       'href="%s" type="text/plain; charset=utf-8" />'."\n",
-                      esc_attr($site_name),
+                      esc_attr(to_utf8($site_name)),
                       esc_attr(href(project=>undef, action=>"project_index")));
                printf('<link rel="alternate" title="%s projects feeds" '.
                       'href="%s" type="text/x-opml" />'."\n",
-                      esc_attr($site_name),
+                      esc_attr(to_utf8($site_name)),
                       esc_attr(href(project=>undef, action=>"opml")));
        }
 }
@@ -4123,19 +4123,24 @@ sub print_nav_breadcrumbs_path {
                print $cgi->a({-href => href(project => undef,
                                             project_filter => $dirprefix,
                                             action => "project_list")},
-                             esc_html($part)) . " / ";
+                             esc_html($part)) . "/";
        }
 }
 
 sub print_nav_breadcrumbs {
        my %opts = @_;
+       my $sep = to_utf8("  ›  ");
 
+       my $first = 1;
        for my $crumb (@extra_breadcrumbs, [ $home_link_str => $home_link ]) {
-               print $cgi->a({-href => esc_url($crumb->[1])}, $crumb->[0]) . " / ";
+               print $sep unless $first;
+               $first = 0;
+               print $cgi->a({-href => esc_url($crumb->[1])}, $crumb->[0]);
        }
        if (defined $project) {
                my @dirname = split '/', $project;
                my $projectbasename = pop @dirname;
+               print $sep;
                print_nav_breadcrumbs_path(@dirname);
                print $cgi->a({-href => href(action=>"summary")}, esc_html($projectbasename));
                if (defined $action) {
@@ -4144,13 +4149,14 @@ sub print_nav_breadcrumbs {
                                $action_print = $cgi->a({-href => href(action=>$action)},
                                        $action);
                        }
-                       print " / $action_print";
+                       print "$sep$action_print";
                }
                if (defined $opts{-action_extra}) {
-                       print " / $opts{-action_extra}";
+                       print "$sep$opts{-action_extra}";
                }
                print "\n";
        } elsif (defined $project_filter) {
+               print $sep;
                print_nav_breadcrumbs_path(split '/', $project_filter);
        }
 }
@@ -4249,7 +4255,7 @@ sub git_end_subhead_html {
 }
 
 sub git_footer_html {
-       my $feed_class = 'rss_logo';
+       my $feed_class = 'feed_logo';
 
        print "<footer class=\"page_footer\">\n";
        if (defined $project) {
@@ -8053,12 +8059,12 @@ sub git_commitdiff {
 
        } elsif ($format eq 'plain') {
                local $/ = undef;
-               print <$fd>;
+               print to_utf8(<$fd>);
                close $fd
                        or print "Reading git-diff-tree failed\n";
        } elsif ($format eq 'patch') {
                local $/ = undef;
-               print <$fd>;
+               print to_utf8(<$fd>);
                close $fd
                        or print "Reading git-format-patch failed\n";
        }
@@ -8218,7 +8224,7 @@ sub git_feed {
        return if ($cgi->request_method() eq 'HEAD');
 
        # header variables
-       my $title = "$site_name - $project/$action";
+       my $title = to_utf8($site_name) . " - $project/$action";
        my $feed_type = 'log';
        if (defined $hash) {
                $title .= " - '$hash'";
@@ -8381,7 +8387,7 @@ sub git_opml {
                -charset => 'utf-8',
                -content_disposition => 'inline; filename="opml.xml"');
 
-       my $title = esc_html($site_name);
+       my $title = esc_html(to_utf8($site_name));
        my $filter = " within subdirectory ";
        if (defined $project_filter) {
                $filter .= esc_html($project_filter);