From 0d4b5126227e19b68b3783624f1569a12f7b4439 Mon Sep 17 00:00:00 2001 From: Roan Kattouw Date: Mon, 23 Mar 2009 19:58:07 +0000 Subject: [PATCH] API: Add a check for PHP bug 45314 (PHP's WDDX formatter messes up UTF-8) and fix up a similar check for JSON, which couldn't possibly succeed due to missing quotes. See also http://lists.wikimedia.org/pipermail/mediawiki-api/2009-March/001039.html --- includes/api/ApiFormatJson.php | 2 +- includes/api/ApiFormatWddx.php | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/includes/api/ApiFormatJson.php b/includes/api/ApiFormatJson.php index 7920f738a7..0159dbf1dd 100644 --- a/includes/api/ApiFormatJson.php +++ b/includes/api/ApiFormatJson.php @@ -61,7 +61,7 @@ class ApiFormatJson extends ApiFormatBase { // Some versions of PHP have a broken json_encode, see PHP bug // 46944. Test encoding an affected character (U+20000) to // avoid this. - if (!function_exists('json_encode') || $this->getIsHtml() || strtolower(json_encode("\xf0\xa0\x80\x80")) != '\ud840\udc00') { + if (!function_exists('json_encode') || $this->getIsHtml() || strtolower(json_encode("\xf0\xa0\x80\x80")) != '"\ud840\udc00"') { $json = new Services_JSON(); $this->printText($prefix . $json->encode($this->getResultData(), $this->getIsHtml()) . $suffix); } else { diff --git a/includes/api/ApiFormatWddx.php b/includes/api/ApiFormatWddx.php index 06f1ecc1e7..ac9a53c3a6 100644 --- a/includes/api/ApiFormatWddx.php +++ b/includes/api/ApiFormatWddx.php @@ -42,7 +42,13 @@ class ApiFormatWddx extends ApiFormatBase { } public function execute() { - if (function_exists('wddx_serialize_value') && !$this->getIsHtml()) { + // Some versions of PHP have a broken wddx_serialize_value, see + // PHP bug 45314. Test encoding an affected character (U+00A0) + // to avoid this. + $expected = "
\xc2\xa0"; + if (function_exists('wddx_serialize_value') + && !$this->getIsHtml() + && wddx_serialize_value("\xc2\xa0") != $expected) { $this->printText(wddx_serialize_value($this->getResultData())); } else { // Don't do newlines and indentation if we weren't asked @@ -60,8 +66,8 @@ class ApiFormatWddx extends ApiFormatBase { } /** - * Recursivelly go through the object and output its data in WDDX format. - */ + * Recursively go through the object and output its data in WDDX format. + */ function slowWddxPrinter($elemValue, $indent = 0) { $indstr = ($this->getIsHtml() ? "" : str_repeat(' ', $indent)); $indstr2 = ($this->getIsHtml() ? "" : str_repeat(' ', $indent + 2)); -- 2.20.1