From 3d2aaa5d315ff77d416eac52eebfc5ae857126b4 Mon Sep 17 00:00:00 2001 From: "wurblzap%gmail.com" <> Date: Mon, 23 Jan 2006 05:37:37 +0000 Subject: Bug 319331: mailto link generated with BiDi user name and email address gets mangled with timestamp. Patch by Marc Schumann , r=justdave, r(char list)=smontagu, a=justdave --- Bugzilla/Template.pm | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'Bugzilla/Template.pm') 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; }, -- cgit v1.2.3-24-g4f1b