summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Template.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla/Template.pm')
-rw-r--r--Bugzilla/Template.pm34
1 files changed, 32 insertions, 2 deletions
diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm
index 7dfb5c539..08bcfacdf 100644
--- a/Bugzilla/Template.pm
+++ b/Bugzilla/Template.pm
@@ -461,11 +461,41 @@ sub create {
# Format a time for display (more info in Bugzilla::Util)
time => \&Bugzilla::Util::format_time,
- # Override html filter to obscure the '@' in user visible strings
- # See bug 120030 for details
+ # Bug 120030: Override html filter to obscure the '@' in user
+ # visible strings.
+ # Bug 319331: Handle BiDi disruptions.
html => sub {
my ($var) = Template::Filters::html_filter(@_);
+ # Obscure '@'.
$var =~ s/\@/\@/g;
+ if (Param('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 |
+ # --------------------------------------------------------
+ #
+ # Do the replacing in a loop so that we don't get tricked
+ # by stuff like 0xe2 0xe2 0x80 0xae 0x80 0xae.
+ while ($var =~ s/\xe2\x80(\xaa|\xab|\xac|\xad|\xae)//g) {
+ }
+ }
return $var;
},