]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Remove "Unicode non-character 0xfdd0 is illegal for interchange" warnings thrown...
authorFrédéric Buclin <LpSolit@gmail.com>
Wed, 26 Feb 2014 10:14:08 +0000 (11:14 +0100)
committerFrédéric Buclin <LpSolit@gmail.com>
Wed, 26 Feb 2014 10:14:08 +0000 (11:14 +0100)
r=gerv

Bugzilla/Bug.pm
Bugzilla/Comment.pm
Bugzilla/Search.pm

index 73b50018a0725da9413b0d4095fa1784b68531f6..dd22426bbd0e9bbc249d8aa047cd42c7c89c3c78 100644 (file)
@@ -3412,15 +3412,18 @@ sub comments {
     if (!defined $self->{'comments'}) {
         $self->{'comments'} = Bugzilla::Comment->match({ bug_id => $self->id });
         my $count = 0;
-        my $is_mysql = Bugzilla->dbh->isa('Bugzilla::DB::Mysql') ? 1 : 0;
+        state $is_mysql = Bugzilla->dbh->isa('Bugzilla::DB::Mysql') ? 1 : 0;
         foreach my $comment (@{ $self->{'comments'} }) {
             $comment->{count} = $count++;
             $comment->{bug} = $self;
             # XXX - hack for MySQL. Convert [U+....] back into its Unicode
             # equivalent for characters above U+FFFF as MySQL older than 5.5.3
             # cannot store them, see Bugzilla::Comment::_check_thetext().
-            $comment->{thetext} =~ s/\x{FDD0}\[U\+((?:[1-9A-F]|10)[0-9A-F]{4})\]\x{FDD1}/chr(hex $1)/eg
-              if $is_mysql;
+            if ($is_mysql) {
+                # Perl 5.13.8 and older complain about non-characters.
+                no warnings 'utf8';
+                $comment->{thetext} =~ s/\x{FDD0}\[U\+((?:[1-9A-F]|10)[0-9A-F]{4})\]\x{FDD1}/chr(hex $1)/eg
+            }
         }
         # Some bugs may have no comments when upgrading old installations.
         Bugzilla::Comment->preload($self->{'comments'}) if $count;
index 0dada24cfa353eeedc822834b003923ae85f6562..238770d57207aa4f9e3d3bc8df91f0251fe5b2a1 100644 (file)
@@ -429,7 +429,10 @@ sub _check_thetext {
     # without any problem. So we need to replace these characters if we use MySQL,
     # else the comment is truncated.
     # XXX - Once we use utf8mb4 for comments, this hack for MySQL can go away.
-    if (Bugzilla->dbh->isa('Bugzilla::DB::Mysql')) {
+    state $is_mysql = Bugzilla->dbh->isa('Bugzilla::DB::Mysql') ? 1 : 0;
+    if ($is_mysql) {
+        # Perl 5.13.8 and older complain about non-characters.
+        no warnings 'utf8';
         $thetext =~ s/([\x{10000}-\x{10FFFF}])/"\x{FDD0}[" . uc(sprintf('U+%04x', ord($1))) . "]\x{FDD1}"/eg;
     }
 
index 399a5b20234b2dd6af7712e0496cf24240ac2aa4..23c63299683d04307fbdc9b1964300f4faa40df8 100644 (file)
@@ -1789,13 +1789,15 @@ sub _handle_chart {
     $field = FIELD_MAP->{$field} || $field;
 
     my ($string_value, $orig_value);
+    state $is_mysql = $dbh->isa('Bugzilla::DB::Mysql') ? 1 : 0;
+
     if (ref $value eq 'ARRAY') {
         # Trim input and ignore blank values.
         @$value = map { trim($_) } @$value;
         @$value = grep { defined $_ and $_ ne '' } @$value;
         return if !@$value;
         $orig_value = join(',', @$value);
-        if ($field eq 'longdesc') {
+        if ($field eq 'longdesc' && $is_mysql) {
             @$value = map { _convert_unicode_characters($_) } @$value;
         }
         $string_value = join(',', @$value);
@@ -1803,10 +1805,12 @@ sub _handle_chart {
     else {
         return if $value eq '';
         $orig_value = $value;
-        $value = _convert_unicode_characters($value) if $field eq 'longdesc';
+        if ($field eq 'longdesc' && $is_mysql) {
+            $value = _convert_unicode_characters($value);
+        }
         $string_value = $value;
     }
-    
+
     $self->_chart_fields->{$field}
         or ThrowCodeError("invalid_field_name", { field => $field });
     trick_taint($field);
@@ -1867,9 +1871,9 @@ sub _handle_chart {
 sub _convert_unicode_characters {
     my $string = shift;
 
-    if (Bugzilla->dbh->isa('Bugzilla::DB::Mysql')) {
-        $string =~ s/([\x{10000}-\x{10FFFF}])/"\x{FDD0}[" . uc(sprintf('U+%04x', ord($1))) . "]\x{FDD1}"/eg;
-    }
+    # Perl 5.13.8 and older complain about non-characters.
+    no warnings 'utf8';
+    $string =~ s/([\x{10000}-\x{10FFFF}])/"\x{FDD0}[" . uc(sprintf('U+%04x', ord($1))) . "]\x{FDD1}"/eg;
     return $string;
 }