]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 609538: Make the JSON-RPC interface support UTF-8 when a recent version
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Mon, 14 Feb 2011 20:07:52 +0000 (12:07 -0800)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Mon, 14 Feb 2011 20:07:52 +0000 (12:07 -0800)
of LWP is installed
r=dkl, a=mkanat

Bugzilla/WebService/Server/JSONRPC.pm
js/global.js

index 49520505a25a977e35a24ac0f250fdccb1b68a5d..8fe72408060871cd4cfe7e00a9e72b83ca9bfa5b 100644 (file)
@@ -27,8 +27,9 @@ use base qw(JSON::RPC::Server::CGI Bugzilla::WebService::Server);
 use Bugzilla::Error;
 use Bugzilla::WebService::Constants;
 use Bugzilla::WebService::Util qw(taint_data);
-use Bugzilla::Util qw(correct_urlbase trim);
+use Bugzilla::Util qw(correct_urlbase trim disable_utf8);
 
+use HTTP::Message;
 use MIME::Base64 qw(decode_base64 encode_base64);
 
 #####################################
@@ -59,6 +60,20 @@ sub create_json_coder {
 # Override the JSON::RPC method to return our CGI object instead of theirs.
 sub cgi { return Bugzilla->cgi; }
 
+sub response_header {
+    my $self = shift;
+    # The HTTP body needs to be bytes (not a utf8 string) for recent
+    # versions of HTTP::Message, but JSON::RPC::Server doesn't handle this
+    # properly. $_[1] is the HTTP body content we're going to be sending.
+    if (utf8::is_utf8($_[1])) {
+        utf8::encode($_[1]);
+        # Since we're going to just be sending raw bytes, we need to
+        # set STDOUT to not expect utf8.
+        disable_utf8();
+    }
+    return $self->SUPER::response_header(@_);
+}
+
 sub response {
     my ($self, $response) = @_;
 
index d6e11e9b135e30856931cbf6638fb5a277ed05da..b62d7b9a772b8b2f45a43fd6d1f64c3ceff696af 100644 (file)
@@ -123,7 +123,9 @@ function set_language( value ) {
 // This basically duplicates Bugzilla::Util::display_value for code that
 // can't go through the template and has to be in JS.
 function display_value(field, value) {
-    var translated = BUGZILLA.value_descs[field][value];
+    var field_trans = BUGZILLA.value_descs[field];
+    if (!field_trans) return value;
+    var translated = field_trans[value];
     if (translated) return translated;
     return value;
 }