PleaseStand has uploaded a new change for review.
https://gerrit.wikimedia.org/r/56357
Change subject: Fix pretty JSON when strings end with backslashes
......................................................................
Fix pretty JSON when strings end with backslashes
If a string encoded as part of the output ends in a backslash
(e.g. an edit token), FormatJson::prettyPrint() may incorrectly
treat the unescaped double quote marking the end of the string as
a character that is part of the string.
To fix the bug, I exploit strtr's behavior when it is given an
associative array having keys of the same length to skip over
escaped backslashes while replacing escaped double quotes with "\x01".
I also updated the corresponding unit test.
Change-Id: I159105b6493c14b82cd0a41a95e04bfed744931e
---
M includes/json/FormatJson.php
M tests/phpunit/includes/json/FormatJsonTest.php
2 files changed, 3 insertions(+), 3 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core
refs/changes/57/56357/1
diff --git a/includes/json/FormatJson.php b/includes/json/FormatJson.php
index 013d589..bdf98d5 100644
--- a/includes/json/FormatJson.php
+++ b/includes/json/FormatJson.php
@@ -168,7 +168,7 @@
private static function prettyPrint( $json ) {
$buf = '';
$indent = 0;
- $json = str_replace( '\"', "\x01", $json );
+ $json = strtr( $json, array( '\\\\' => '\\\\', '\"' => "\x01" )
);
for ( $i = 0, $n = strlen( $json ); $i < $n; $i += $skip ) {
$skip = 1;
switch ( $json[$i] ) {
diff --git a/tests/phpunit/includes/json/FormatJsonTest.php
b/tests/phpunit/includes/json/FormatJsonTest.php
index 9e25e18..89d7ea1 100644
--- a/tests/phpunit/includes/json/FormatJsonTest.php
+++ b/tests/phpunit/includes/json/FormatJsonTest.php
@@ -6,7 +6,7 @@
$obj = array(
'emptyObject' => new stdClass,
'emptyArray' => array(),
- 'string' => 'foobar',
+ 'string' => 'foo"bar\\',
'filledArray' => array(
array(
123,
@@ -24,7 +24,7 @@
"emptyArray": [
],
- "string": "foobar",
+ "string": "foo\"bar\\\\",
"filledArray": [
[
123,
--
To view, visit https://gerrit.wikimedia.org/r/56357
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I159105b6493c14b82cd0a41a95e04bfed744931e
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: PleaseStand <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits