Commit b3f8306d authored by lpsolit%gmail.com's avatar lpsolit%gmail.com

Bug 476305: Clean up and merge HTML filtering code - Patch by Vitaly Fedrushkov…

Bug 476305: Clean up and merge HTML filtering code - Patch by Vitaly Fedrushkov <vitaly.fedrushkov@gmail.com> r/a=LpSolit
parent 8a3a795c
...@@ -641,39 +641,7 @@ sub create { ...@@ -641,39 +641,7 @@ sub create {
1 1
], ],
# Bug 120030: Override html filter to obscure the '@' in user html => \&Bugzilla::Util::html_quote,
# visible strings.
# Bug 319331: Handle BiDi disruptions.
html => sub {
my ($var) = Template::Filters::html_filter(@_);
# Obscure '@'.
$var =~ s/\@/\&#64;/g;
if (Bugzilla->params->{'utf8'}) {
# Remove the following characters because they're
# influencing BiDi:
# --------------------------------------------------------
# |Code |Name |UTF-8 representation|
# |------|--------------------------|--------------------|
# |U+202a|Left-To-Right Embedding |0xe2 0x80 0xaa |
# |U+202b|Right-To-Left Embedding |0xe2 0x80 0xab |
# |U+202c|Pop Directional Formatting|0xe2 0x80 0xac |
# |U+202d|Left-To-Right Override |0xe2 0x80 0xad |
# |U+202e|Right-To-Left Override |0xe2 0x80 0xae |
# --------------------------------------------------------
#
# The following are characters influencing BiDi, too, but
# they can be spared from filtering because they don't
# influence more than one character right or left:
# --------------------------------------------------------
# |Code |Name |UTF-8 representation|
# |------|--------------------------|--------------------|
# |U+200e|Left-To-Right Mark |0xe2 0x80 0x8e |
# |U+200f|Right-To-Left Mark |0xe2 0x80 0x8f |
# --------------------------------------------------------
$var =~ s/[\x{202a}-\x{202e}]//g;
}
return $var;
},
html_light => \&Bugzilla::Util::html_light_quote, html_light => \&Bugzilla::Util::html_light_quote,
......
...@@ -55,6 +55,7 @@ use DateTime::TimeZone; ...@@ -55,6 +55,7 @@ use DateTime::TimeZone;
use Digest; use Digest;
use Email::Address; use Email::Address;
use Scalar::Util qw(tainted); use Scalar::Util qw(tainted);
use Template::Filters;
use Text::Wrap; use Text::Wrap;
sub trick_taint { sub trick_taint {
...@@ -81,12 +82,37 @@ sub detaint_signed { ...@@ -81,12 +82,37 @@ sub detaint_signed {
return (defined($_[0])); return (defined($_[0]));
} }
# Bug 120030: Override html filter to obscure the '@' in user
# visible strings.
# Bug 319331: Handle BiDi disruptions.
sub html_quote { sub html_quote {
my ($var) = (@_); my ($var) = Template::Filters::html_filter(@_);
$var =~ s/\&/\&amp;/g; # Obscure '@'.
$var =~ s/</\&lt;/g; $var =~ s/\@/\&#64;/g;
$var =~ s/>/\&gt;/g; if (Bugzilla->params->{'utf8'}) {
$var =~ s/\"/\&quot;/g; # Remove the following characters because they're
# influencing BiDi:
# --------------------------------------------------------
# |Code |Name |UTF-8 representation|
# |------|--------------------------|--------------------|
# |U+202a|Left-To-Right Embedding |0xe2 0x80 0xaa |
# |U+202b|Right-To-Left Embedding |0xe2 0x80 0xab |
# |U+202c|Pop Directional Formatting|0xe2 0x80 0xac |
# |U+202d|Left-To-Right Override |0xe2 0x80 0xad |
# |U+202e|Right-To-Left Override |0xe2 0x80 0xae |
# --------------------------------------------------------
#
# The following are characters influencing BiDi, too, but
# they can be spared from filtering because they don't
# influence more than one character right or left:
# --------------------------------------------------------
# |Code |Name |UTF-8 representation|
# |------|--------------------------|--------------------|
# |U+200e|Left-To-Right Mark |0xe2 0x80 0x8e |
# |U+200f|Right-To-Left Mark |0xe2 0x80 0x8f |
# --------------------------------------------------------
$var =~ s/[\x{202a}-\x{202e}]//g;
}
return $var; return $var;
} }
...@@ -745,8 +771,9 @@ be done in the template where possible. ...@@ -745,8 +771,9 @@ be done in the template where possible.
=item C<html_quote($val)> =item C<html_quote($val)>
Returns a value quoted for use in HTML, with &, E<lt>, E<gt>, and E<34> being Returns a value quoted for use in HTML, with &, E<lt>, E<gt>, E<34> and @ being
replaced with their appropriate HTML entities. replaced with their appropriate HTML entities. Also, Unicode BiDi controls are
deleted.
=item C<html_light_quote($val)> =item C<html_light_quote($val)>
......
...@@ -45,7 +45,7 @@ my $tz = Bugzilla->local_timezone->short_name_for_datetime(DateTime->new(year => ...@@ -45,7 +45,7 @@ my $tz = Bugzilla->local_timezone->short_name_for_datetime(DateTime->new(year =>
# XXX: test taint functions # XXX: test taint functions
#html_quote(): #html_quote():
is(html_quote("<lala&>"),"&lt;lala&amp;&gt;",'html_quote'); is(html_quote("<lala&@>"),"&lt;lala&amp;&#64;&gt;",'html_quote');
#url_quote(): #url_quote():
is(url_quote("<lala&>gaa\"'[]{\\"),"%3Clala%26%3Egaa%22%27%5B%5D%7B%5C",'url_quote'); is(url_quote("<lala&>gaa\"'[]{\\"),"%3Clala%26%3Egaa%22%27%5B%5D%7B%5C",'url_quote');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment