X-Git-Url: https://git.ladys.computer/Gitweb/blobdiff_plain/5d944b9d5c813f44ee25ce55ec7dc37caa62bab6caea5827f5296de1cc8902eb..ceaa039c07bb2aa46dc3fbfd0c43d587d30ee96e0a1f69a2ee69dbfbab4702e5:/gitweb.perl
diff --git a/gitweb.perl b/gitweb.perl
index 4591ed7..39a1958 100755
--- a/gitweb.perl
+++ b/gitweb.perl
@@ -585,11 +585,39 @@ sub esc_html ($;%) {
return $str;
}
+# Make control characterss "printable".
+sub quot_cec {
+ my $cntrl = shift;
+ my %es = ( # character escape codes, aka escape sequences
+ "\t" => '\t', # tab (HT)
+ "\n" => '\n', # line feed (LF)
+ "\r" => '\r', # carrige return (CR)
+ "\f" => '\f', # form feed (FF)
+ "\b" => '\b', # backspace (BS)
+ "\a" => '\a', # alarm (bell) (BEL)
+ "\e" => '\e', # escape (ESC)
+ "\013" => '\v', # vertical tab (VT)
+ "\000" => '\0', # nul character (NUL)
+ );
+ my $chr = ( (exists $es{$cntrl})
+ ? $es{$cntrl}
+ : sprintf('\%03o', ord($cntrl)) );
+ return "$chr";
+}
+
+# Alternatively use unicode control pictures codepoints.
+sub quot_upr {
+ my $cntrl = shift;
+ my $chr = sprintf('%04d;', 0x2400+ord($cntrl));
+ return "$chr";
+}
+
# quote control characters and escape filename to HTML
sub esc_path {
my $str = shift;
+
$str = esc_html($str);
- $str =~ s|([[:cntrl:]])|?|g;
+ $str =~ s|([[:cntrl:]])|quot_cec($1)|eg;
return $str;
}