gitweb: Provide title attributes for abbreviated author names.
PATCH 1/1 gitweb: Provide title attributes for abbreviated author names.
--- gitweb/gitweb.perl | 34 +++++++++++++++++++++++++++++----- 1 files changed, 29 insertions(+), 5 deletions(-)
gitweb/gitweb.perl +29 -5
@@ -3461,9 +3461,15 @@ sub git_shortlog_body { print "<tr class=\"light\">\n"; } $alternate ^= 1; + my $author = chop_str($co{'author_name'}, 10); + if ($author ne $co{'author_name'}) { + $author = "<span title=\"$co{'author_name'}\">" . esc_html($author) . "</span>"; + } else { + $author = esc_html($author); + } # git_summary() used print "<td><i>$co{'age_string'}</i></td>\n" . print "<td title=\"$co{'age_string_age'}\"><i>$co{'age_string_date'}</i></td>\n" . - "<td><i>" . esc_html(chop_str($co{'author_name'}, 10)) . "</i></td>\n" . + "<td><i>" . $author . "</i></td>\n" . "<td>"; print format_subject_html($co{'title'}, $co{'title_short'}, href(action=>"commit", hash=>$commit), $ref);
@@ -3511,9 +3517,15 @@ sub git_history_body { print "<tr class=\"light\">\n"; } $alternate ^= 1; + # shortlog uses chop_str($co{'author_name'}, 10) + my $author = chop_str($co{'author_name'}, 15, 3); + if ($author ne $co{'author_name'}) { + "<span title=\"$co{'author_name'}\">" . esc_html($author) . "</span>"; + } else { + $author = esc_html($author); + } print "<td title=\"$co{'age_string_age'}\"><i>$co{'age_string_date'}</i></td>\n" . - # shortlog uses chop_str($co{'author_name'}, 10) - "<td><i>" . esc_html(chop_str($co{'author_name'}, 15, 3)) . "</i></td>\n" . + "<td><i>" . $author . "</i></td>\n" . "<td>"; # originally git_history used chop_str($co{'title'}, 50) print format_subject_html($co{'title'}, $co{'title_short'},
@@ -3667,8 +3679,14 @@ sub git_search_grep_body { print "<tr class=\"light\">\n"; } $alternate ^= 1; + my $author = chop_str($co{'author_name'}, 15, 5); + if ($author ne $co{'author_name'}) { + $author = "<span title=\"$co{'author_name'}\">" . esc_html($author) . "</span>"; + } else { + $author = esc_html($author); + } print "<td title=\"$co{'age_string_age'}\"><i>$co{'age_string_date'}</i></td>\n" . - "<td><i>" . esc_html(chop_str($co{'author_name'}, 15, 5)) . "</i></td>\n" . + "<td><i>" . $author . "</i></td>\n" . "<td>" . $cgi->a({-href => href(action=>"commit", hash=>$co{'id'}), -class => "list subject"}, esc_html(chop_str($co{'title'}, 50)) . "<br/>");
@@ -5181,8 +5199,14 @@ sub git_search { print "<tr class=\"light\">\n"; } $alternate ^= 1; + my $author = chop_str($co{'author_name'}, 15, 5); + if ($author ne $co{'author_name'}) { + $author = "<span title=\"$co{'author_name'}\">" . esc_html($author) . "</span>"; + } else { + $author = esc_html($author); + } print "<td title=\"$co{'age_string_age'}\"><i>$co{'age_string_date'}</i></td>\n" . - "<td><i>" . esc_html(chop_str($co{'author_name'}, 15, 5)) . "</i></td>\n" . + "<td><i>" . $author . "</i></td>\n" . "<td>" . $cgi->a({-href => href(action=>"commit", hash=>$co{'id'}), -class => "list subject"},
Signature · 1 line
1.5.3.1
Nice, but...
gitweb/gitweb.perl sub git_shortlog_body { · line 3466
Quoted 8 lines · David Symonds
+++ b/gitweb/gitweb.perl
gitweb/gitweb.perl +3
-0@@ -3461,9 +3461,15 @@ sub git_shortlog_body { print "<tr class=\"light\">\n"; } $alternate ^= 1; + my $author = chop_str($co{'author_name'}, 10); + if ($author ne $co{'author_name'}) { + $author = "<span title=\"$co{'author_name'}\">" . esc_html($author) . "</span>";
Doesn't this produce invalid HTML if $co{'author_name'} has a special HTML character in it such as & or "? Note that " is much more likely as it is often used for nicknames. The old code properly escaped the author name, and indeed you are doing it for the abbreviated version but not the full version.
This bug seemed to exist in almost all (if not all) of the hunks.
Signature · 1 line
Shawn.
Quoted 17 lines · Shawn O. Pearce
Nice, but...
gitweb/gitweb.perl sub git_shortlog_body { · line 3466
Quoted 8 lines · David Symonds
+++ b/gitweb/gitweb.perl
gitweb/gitweb.perl +3
-0@@ -3461,9 +3461,15 @@ sub git_shortlog_body { print "<tr class=\"light\">\n"; } $alternate ^= 1; + my $author = chop_str($co{'author_name'}, 10); + if ($author ne $co{'author_name'}) { + $author = "<span title=\"$co{'author_name'}\">" . esc_html($author) . "</span>";Doesn't this produce invalid HTML if $co{'author_name'} has a special HTML character in it such as & or "? Note that " is much more likely as it is often used for nicknames. The old code properly escaped the author name, and indeed you are doing it for the abbreviated version but not the full version.
Sure, I'll fix it up and resend. I might even refactor some code at the same time.
Dave.