|
|
|
@ -1178,6 +1178,13 @@ sub esc_url {
@@ -1178,6 +1178,13 @@ sub esc_url {
|
|
|
|
|
return $str; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# quote unsafe characters in HTML attributes |
|
|
|
|
sub esc_attr { |
|
|
|
|
|
|
|
|
|
# for XHTML conformance escaping '"' to '"' is not enough |
|
|
|
|
return esc_html(@_); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# replace invalid utf8 character with SUBSTITUTION sequence |
|
|
|
|
sub esc_html { |
|
|
|
|
my $str = shift; |
|
|
|
@ -1583,7 +1590,7 @@ sub format_ref_marker {
@@ -1583,7 +1590,7 @@ sub format_ref_marker {
|
|
|
|
|
hash=>$dest |
|
|
|
|
)}, $name); |
|
|
|
|
|
|
|
|
|
$markers .= " <span class=\"$class\" title=\"$ref\">" . |
|
|
|
|
$markers .= " <span class=\"".esc_attr($class)."\" title=\"".esc_attr($ref)."\">" . |
|
|
|
|
$link . "</span>"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1667,7 +1674,7 @@ sub git_get_avatar {
@@ -1667,7 +1674,7 @@ sub git_get_avatar {
|
|
|
|
|
return $pre_white . |
|
|
|
|
"<img width=\"$size\" " . |
|
|
|
|
"class=\"avatar\" " . |
|
|
|
|
"src=\"$url\" " . |
|
|
|
|
"src=\"".esc_url($url)."\" " . |
|
|
|
|
"alt=\"\" " . |
|
|
|
|
"/>" . $post_white; |
|
|
|
|
} else { |
|
|
|
@ -2378,7 +2385,7 @@ sub git_show_project_tagcloud {
@@ -2378,7 +2385,7 @@ sub git_show_project_tagcloud {
|
|
|
|
|
} else { |
|
|
|
|
my @tags = sort { $cloud->{$a}->{count} <=> $cloud->{$b}->{count} } keys %$cloud; |
|
|
|
|
return '<p align="center">' . join (', ', map { |
|
|
|
|
"<a href=\"$home_link?by_tag=$_\">$cloud->{$_}->{topname}</a>" |
|
|
|
|
$cgi->a({-href=>"$home_link?by_tag=$_"}, $cloud->{$_}->{topname}) |
|
|
|
|
} splice(@tags, 0, $count)) . '</p>'; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -3209,11 +3216,11 @@ EOF
@@ -3209,11 +3216,11 @@ EOF
|
|
|
|
|
# print out each stylesheet that exist, providing backwards capability |
|
|
|
|
# for those people who defined $stylesheet in a config file |
|
|
|
|
if (defined $stylesheet) { |
|
|
|
|
print '<link rel="stylesheet" type="text/css" href="'.$stylesheet.'"/>'."\n"; |
|
|
|
|
print '<link rel="stylesheet" type="text/css" href="'.esc_url($stylesheet).'"/>'."\n"; |
|
|
|
|
} else { |
|
|
|
|
foreach my $stylesheet (@stylesheets) { |
|
|
|
|
next unless $stylesheet; |
|
|
|
|
print '<link rel="stylesheet" type="text/css" href="'.$stylesheet.'"/>'."\n"; |
|
|
|
|
print '<link rel="stylesheet" type="text/css" href="'.esc_url($stylesheet).'"/>'."\n"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (defined $project) { |
|
|
|
@ -3226,7 +3233,7 @@ EOF
@@ -3226,7 +3233,7 @@ EOF
|
|
|
|
|
my $type = lc($format); |
|
|
|
|
my %link_attr = ( |
|
|
|
|
'-rel' => 'alternate', |
|
|
|
|
'-title' => "$project - $href_params{'-title'} - $format feed", |
|
|
|
|
'-title' => esc_attr("$project - $href_params{'-title'} - $format feed"), |
|
|
|
|
'-type' => "application/$type+xml" |
|
|
|
|
); |
|
|
|
|
|
|
|
|
@ -3253,13 +3260,13 @@ EOF
@@ -3253,13 +3260,13 @@ EOF
|
|
|
|
|
} else { |
|
|
|
|
printf('<link rel="alternate" title="%s projects list" '. |
|
|
|
|
'href="%s" type="text/plain; charset=utf-8" />'."\n", |
|
|
|
|
$site_name, href(project=>undef, action=>"project_index")); |
|
|
|
|
esc_attr($site_name), href(project=>undef, action=>"project_index")); |
|
|
|
|
printf('<link rel="alternate" title="%s projects feeds" '. |
|
|
|
|
'href="%s" type="text/x-opml" />'."\n", |
|
|
|
|
$site_name, href(project=>undef, action=>"opml")); |
|
|
|
|
esc_attr($site_name), href(project=>undef, action=>"opml")); |
|
|
|
|
} |
|
|
|
|
if (defined $favicon) { |
|
|
|
|
print qq(<link rel="shortcut icon" href="$favicon" type="image/png" />\n); |
|
|
|
|
print qq(<link rel="shortcut icon" href=").esc_url($favicon).qq(" type="image/png" />\n); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
print "</head>\n" . |
|
|
|
@ -3272,7 +3279,7 @@ EOF
@@ -3272,7 +3279,7 @@ EOF
|
|
|
|
|
print "<div class=\"page_header\">\n" . |
|
|
|
|
$cgi->a({-href => esc_url($logo_url), |
|
|
|
|
-title => $logo_label}, |
|
|
|
|
qq(<img src="$logo" width="72" height="27" alt="git" class="logo"/>)); |
|
|
|
|
qq(<img src=").esc_url($logo).qq(" width="72" height="27" alt="git" class="logo"/>)); |
|
|
|
|
print $cgi->a({-href => esc_url($home_link)}, $home_link_str) . " / "; |
|
|
|
|
if (defined $project) { |
|
|
|
|
print $cgi->a({-href => href(action=>"summary")}, esc_html($project)); |
|
|
|
@ -3370,7 +3377,7 @@ sub git_footer_html {
@@ -3370,7 +3377,7 @@ sub git_footer_html {
|
|
|
|
|
insert_file($site_footer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
print qq!<script type="text/javascript" src="$javascript"></script>\n!; |
|
|
|
|
print qq!<script type="text/javascript" src="!.esc_url($javascript).qq!"></script>\n!; |
|
|
|
|
if (defined $action && |
|
|
|
|
$action eq 'blame_incremental') { |
|
|
|
|
print qq!<script type="text/javascript">\n!. |
|
|
|
@ -5382,14 +5389,14 @@ sub git_blob {
@@ -5382,14 +5389,14 @@ sub git_blob {
|
|
|
|
|
} else { |
|
|
|
|
print "<div class=\"page_nav\">\n" . |
|
|
|
|
"<br/><br/></div>\n" . |
|
|
|
|
"<div class=\"title\">$hash</div>\n"; |
|
|
|
|
"<div class=\"title\">".esc_html($hash)."</div>\n"; |
|
|
|
|
} |
|
|
|
|
git_print_page_path($file_name, "blob", $hash_base); |
|
|
|
|
print "<div class=\"page_body\">\n"; |
|
|
|
|
if ($mimetype =~ m!^image/!) { |
|
|
|
|
print qq!<img type="$mimetype"!; |
|
|
|
|
print qq!<img type="!.esc_attr($mimetype).qq!"!; |
|
|
|
|
if ($file_name) { |
|
|
|
|
print qq! alt="$file_name" title="$file_name"!; |
|
|
|
|
print qq! alt="!.esc_attr($file_name).qq!" title="!.esc_attr($file_name).qq!"!; |
|
|
|
|
} |
|
|
|
|
print qq! src="! . |
|
|
|
|
href(action=>"blob_plain", hash=>$hash, |
|
|
|
@ -5401,7 +5408,8 @@ sub git_blob {
@@ -5401,7 +5408,8 @@ sub git_blob {
|
|
|
|
|
chomp $line; |
|
|
|
|
$nr++; |
|
|
|
|
$line = untabify($line); |
|
|
|
|
printf "<div class=\"pre\"><a id=\"l%i\" href=\"" . href(-replay => 1) |
|
|
|
|
printf "<div class=\"pre\"><a id=\"l%i\" href=\"" |
|
|
|
|
. esc_attr(href(-replay => 1)) |
|
|
|
|
. "#l%i\" class=\"linenr\">%4i</a> %s</div>\n", |
|
|
|
|
$nr, $nr, $nr, esc_html($line, -nbsp=>1); |
|
|
|
|
} |
|
|
|
@ -5465,7 +5473,7 @@ sub git_tree {
@@ -5465,7 +5473,7 @@ sub git_tree {
|
|
|
|
|
undef $hash_base; |
|
|
|
|
print "<div class=\"page_nav\">\n"; |
|
|
|
|
print "<br/><br/></div>\n"; |
|
|
|
|
print "<div class=\"title\">$hash</div>\n"; |
|
|
|
|
print "<div class=\"title\">".esc_html($hash)."</div>\n"; |
|
|
|
|
} |
|
|
|
|
if (defined $file_name) { |
|
|
|
|
$basedir = $file_name; |
|
|
|
@ -5933,7 +5941,7 @@ sub git_blobdiff {
@@ -5933,7 +5941,7 @@ sub git_blobdiff {
|
|
|
|
|
git_print_header_div('commit', esc_html($co{'title'}), $hash_base); |
|
|
|
|
} else { |
|
|
|
|
print "<div class=\"page_nav\"><br/>$formats_nav<br/></div>\n"; |
|
|
|
|
print "<div class=\"title\">$hash vs $hash_parent</div>\n"; |
|
|
|
|
print "<div class=\"title\">".esc_html("$hash vs $hash_parent")."</div>\n"; |
|
|
|
|
} |
|
|
|
|
if (defined $file_name) { |
|
|
|
|
git_print_page_path($file_name, "blob", $hash_base); |
|
|
|
|