summaryrefslogtreecommitdiff
path: root/gitweb
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2011-10-26 16:13:31 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2011-10-26 16:13:31 -0700
commit25f745fbec0e92a29e33aa85413c2bf7762608bf (patch)
treec87d1daca39490f05ed05f187d7bc593e7f1f8cd /gitweb
parentMerge branch 'jk/argv-array' into maint (diff)
parentgitweb: Strip non-printable characters from syntax highlighter output (diff)
downloadtgif-25f745fbec0e92a29e33aa85413c2bf7762608bf.tar.xz
Merge branch 'jn/gitweb-highlite-sanitise' into maint
* jn/gitweb-highlite-sanitise: gitweb: Strip non-printable characters from syntax highlighter output
Diffstat (limited to 'gitweb')
-rwxr-xr-xgitweb/gitweb.perl14
1 files changed, 13 insertions, 1 deletions
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 70a576a626..85d64b244d 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -1517,6 +1517,17 @@ sub esc_path {
return $str;
}
+# Sanitize for use in XHTML + application/xml+xhtm (valid XML 1.0)
+sub sanitize {
+ my $str = shift;
+
+ return undef unless defined $str;
+
+ $str = to_utf8($str);
+ $str =~ s|([[:cntrl:]])|($1 =~ /[\t\n\r]/ ? $1 : quot_cec($1))|eg;
+ return $str;
+}
+
# Make control characters "printable", using character escape codes (CEC)
sub quot_cec {
my $cntrl = shift;
@@ -6484,7 +6495,8 @@ sub git_blob {
$nr++;
$line = untabify($line);
printf qq!<div class="pre"><a id="l%i" href="%s#l%i" class="linenr">%4i</a> %s</div>\n!,
- $nr, esc_attr(href(-replay => 1)), $nr, $nr, $syntax ? to_utf8($line) : esc_html($line, -nbsp=>1);
+ $nr, esc_attr(href(-replay => 1)), $nr, $nr,
+ $syntax ? sanitize($line) : esc_html($line, -nbsp=>1);
}
}
close $fd