提交 abf411e2 编写于 作者: J Junio C Hamano

Git 1.6.6.3

Signed-off-by: NJunio C Hamano <gitster@pobox.com>
Git v1.6.4.5 Release Notes
==========================
Fixes since v1.6.4.4
--------------------
* Simplified base85 implementation.
* An overlong line after ".gitdir: " in a git file caused out of bounds
access to an array on the stack.
* "git count-objects" did not handle packs larger than 4G.
* "git rev-parse --parseopt --stop-at-non-option" did not stop at non option
when --keep-dashdash was in effect.
* "gitweb" can sometimes be tricked into parrotting a filename argument
given in a request without properly quoting.
Other minor fixes and documentation updates are included.
Git v1.6.5.9 Release Notes
==========================
Fixes since v1.6.5.8
--------------------
* An overlong line after ".gitdir: " in a git file caused out of bounds
access to an array on the stack.
* "git blame -L $start,$end" segfaulted when too large $start was given.
* "git rev-parse --parseopt --stop-at-non-option" did not stop at non option
when --keep-dashdash was in effect.
* "gitweb" can sometimes be tricked into parrotting a filename argument
given in a request without properly quoting.
Other minor fixes and documentation updates are included.
Git v1.6.6.3 Release Notes
==========================
Fixes since v1.6.6.2
--------------------
* An overlong line after ".gitdir: " in a git file caused out of bounds
access to an array on the stack.
* "git bisect $path" did not correctly diagnose an error when given a
non-existent path.
* "git blame -L $start,$end" segfaulted when too large $start was given.
* "git imap-send" did not write draft box with CRLF line endings per RFC.
* "git rev-parse --parseopt --stop-at-non-option" did not stop at non option
when --keep-dashdash was in effect.
* "gitweb" can sometimes be tricked into parrotting a filename argument
given in a request without properly quoting.
Other minor fixes and documentation updates are included.
#!/bin/sh #!/bin/sh
GVF=GIT-VERSION-FILE GVF=GIT-VERSION-FILE
DEF_VER=v1.6.6.2 DEF_VER=v1.6.6.3
LF=' LF='
' '
......
Documentation/RelNotes-1.6.6.2.txt Documentation/RelNotes/1.6.6.3.txt
\ No newline at end of file \ No newline at end of file
...@@ -1137,6 +1137,13 @@ sub esc_url { ...@@ -1137,6 +1137,13 @@ sub esc_url {
return $str; return $str;
} }
# quote unsafe characters in HTML attributes
sub esc_attr {
# for XHTML conformance escaping '"' to '&quot;' is not enough
return esc_html(@_);
}
# replace invalid utf8 character with SUBSTITUTION sequence # replace invalid utf8 character with SUBSTITUTION sequence
sub esc_html { sub esc_html {
my $str = shift; my $str = shift;
...@@ -1542,7 +1549,7 @@ sub format_ref_marker { ...@@ -1542,7 +1549,7 @@ sub format_ref_marker {
hash=>$dest hash=>$dest
)}, $name); )}, $name);
$markers .= " <span class=\"$class\" title=\"$ref\">" . $markers .= " <span class=\"".esc_attr($class)."\" title=\"".esc_attr($ref)."\">" .
$link . "</span>"; $link . "</span>";
} }
} }
...@@ -1626,7 +1633,7 @@ sub git_get_avatar { ...@@ -1626,7 +1633,7 @@ sub git_get_avatar {
return $pre_white . return $pre_white .
"<img width=\"$size\" " . "<img width=\"$size\" " .
"class=\"avatar\" " . "class=\"avatar\" " .
"src=\"$url\" " . "src=\"".esc_url($url)."\" " .
"alt=\"\" " . "alt=\"\" " .
"/>" . $post_white; "/>" . $post_white;
} else { } else {
...@@ -2335,7 +2342,7 @@ sub git_show_project_tagcloud { ...@@ -2335,7 +2342,7 @@ sub git_show_project_tagcloud {
} else { } else {
my @tags = sort { $cloud->{$a}->{count} <=> $cloud->{$b}->{count} } keys %$cloud; my @tags = sort { $cloud->{$a}->{count} <=> $cloud->{$b}->{count} } keys %$cloud;
return '<p align="center">' . join (', ', map { 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>'; } splice(@tags, 0, $count)) . '</p>';
} }
} }
...@@ -3166,11 +3173,11 @@ sub git_header_html { ...@@ -3166,11 +3173,11 @@ sub git_header_html {
# print out each stylesheet that exist, providing backwards capability # print out each stylesheet that exist, providing backwards capability
# for those people who defined $stylesheet in a config file # for those people who defined $stylesheet in a config file
if (defined $stylesheet) { 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 { } else {
foreach my $stylesheet (@stylesheets) { foreach my $stylesheet (@stylesheets) {
next unless $stylesheet; 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) { if (defined $project) {
...@@ -3183,7 +3190,7 @@ sub git_header_html { ...@@ -3183,7 +3190,7 @@ sub git_header_html {
my $type = lc($format); my $type = lc($format);
my %link_attr = ( my %link_attr = (
'-rel' => 'alternate', '-rel' => 'alternate',
'-title' => "$project - $href_params{'-title'} - $format feed", '-title' => esc_attr("$project - $href_params{'-title'} - $format feed"),
'-type' => "application/$type+xml" '-type' => "application/$type+xml"
); );
...@@ -3210,13 +3217,13 @@ sub git_header_html { ...@@ -3210,13 +3217,13 @@ sub git_header_html {
} else { } else {
printf('<link rel="alternate" title="%s projects list" '. printf('<link rel="alternate" title="%s projects list" '.
'href="%s" type="text/plain; charset=utf-8" />'."\n", '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" '. printf('<link rel="alternate" title="%s projects feeds" '.
'href="%s" type="text/x-opml" />'."\n", '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) { 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" . print "</head>\n" .
...@@ -3229,7 +3236,7 @@ sub git_header_html { ...@@ -3229,7 +3236,7 @@ sub git_header_html {
print "<div class=\"page_header\">\n" . print "<div class=\"page_header\">\n" .
$cgi->a({-href => esc_url($logo_url), $cgi->a({-href => esc_url($logo_url),
-title => $logo_label}, -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) . " / "; print $cgi->a({-href => esc_url($home_link)}, $home_link_str) . " / ";
if (defined $project) { if (defined $project) {
print $cgi->a({-href => href(action=>"summary")}, esc_html($project)); print $cgi->a({-href => href(action=>"summary")}, esc_html($project));
...@@ -3327,7 +3334,7 @@ sub git_footer_html { ...@@ -3327,7 +3334,7 @@ sub git_footer_html {
insert_file($site_footer); 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 ($action eq 'blame_incremental') { if ($action eq 'blame_incremental') {
print qq!<script type="text/javascript">\n!. print qq!<script type="text/javascript">\n!.
qq!startBlame("!. href(action=>"blame_data", -replay=>1) .qq!",\n!. qq!startBlame("!. href(action=>"blame_data", -replay=>1) .qq!",\n!.
...@@ -5313,14 +5320,14 @@ sub git_blob { ...@@ -5313,14 +5320,14 @@ sub git_blob {
} else { } else {
print "<div class=\"page_nav\">\n" . print "<div class=\"page_nav\">\n" .
"<br/><br/></div>\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); git_print_page_path($file_name, "blob", $hash_base);
print "<div class=\"page_body\">\n"; print "<div class=\"page_body\">\n";
if ($mimetype =~ m!^image/!) { if ($mimetype =~ m!^image/!) {
print qq!<img type="$mimetype"!; print qq!<img type="!.esc_attr($mimetype).qq!"!;
if ($file_name) { 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="! . print qq! src="! .
href(action=>"blob_plain", hash=>$hash, href(action=>"blob_plain", hash=>$hash,
...@@ -5332,7 +5339,8 @@ sub git_blob { ...@@ -5332,7 +5339,8 @@ sub git_blob {
chomp $line; chomp $line;
$nr++; $nr++;
$line = untabify($line); $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", . "#l%i\" class=\"linenr\">%4i</a> %s</div>\n",
$nr, $nr, $nr, esc_html($line, -nbsp=>1); $nr, $nr, $nr, esc_html($line, -nbsp=>1);
} }
...@@ -5396,7 +5404,7 @@ sub git_tree { ...@@ -5396,7 +5404,7 @@ sub git_tree {
undef $hash_base; undef $hash_base;
print "<div class=\"page_nav\">\n"; print "<div class=\"page_nav\">\n";
print "<br/><br/></div>\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) { if (defined $file_name) {
$basedir = $file_name; $basedir = $file_name;
...@@ -5864,7 +5872,7 @@ sub git_blobdiff { ...@@ -5864,7 +5872,7 @@ sub git_blobdiff {
git_print_header_div('commit', esc_html($co{'title'}), $hash_base); git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
} else { } else {
print "<div class=\"page_nav\"><br/>$formats_nav<br/></div>\n"; 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) { if (defined $file_name) {
git_print_page_path($file_name, "blob", $hash_base); git_print_page_path($file_name, "blob", $hash_base);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册