From: Max Kanat-Alexander Date: Mon, 14 Feb 2011 20:07:52 +0000 (-0800) Subject: Bug 609538: Make the JSON-RPC interface support UTF-8 when a recent version X-Git-Tag: bugzilla-4.0~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb47205c5dd6c6f304700b73db82656356c5ac2a;p=thirdparty%2Fbugzilla.git Bug 609538: Make the JSON-RPC interface support UTF-8 when a recent version of LWP is installed r=dkl, a=mkanat --- diff --git a/Bugzilla/WebService/Server/JSONRPC.pm b/Bugzilla/WebService/Server/JSONRPC.pm index 49520505a2..8fe7240806 100644 --- a/Bugzilla/WebService/Server/JSONRPC.pm +++ b/Bugzilla/WebService/Server/JSONRPC.pm @@ -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) = @_; diff --git a/js/global.js b/js/global.js index d6e11e9b13..b62d7b9a77 100644 --- a/js/global.js +++ b/js/global.js @@ -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; }