Add support for nested arrays in the json manipulator, fixes #3296
parent
eba04dc211
commit
55a6a1c3d4
|
@ -18,6 +18,7 @@ namespace Composer\Json;
|
|||
class JsonManipulator
|
||||
{
|
||||
private static $RECURSE_BLOCKS;
|
||||
private static $RECURSE_ARRAYS;
|
||||
private static $JSON_VALUE;
|
||||
private static $JSON_STRING;
|
||||
|
||||
|
@ -29,8 +30,9 @@ class JsonManipulator
|
|||
{
|
||||
if (!self::$RECURSE_BLOCKS) {
|
||||
self::$RECURSE_BLOCKS = '(?:[^{}]*|\{(?:[^{}]*|\{(?:[^{}]*|\{(?:[^{}]*|\{[^{}]*\})*\})*\})*\})*';
|
||||
self::$JSON_STRING = '"(?:\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\0-\x09\x0a-\x1f\\\\"])*"';
|
||||
self::$JSON_VALUE = '(?:[0-9.]+|null|true|false|'.self::$JSON_STRING.'|\[[^\]]*\]|\{'.self::$RECURSE_BLOCKS.'\})';
|
||||
self::$RECURSE_ARRAYS = '(?:[^\]]*|\[(?:[^\]]*|\[(?:[^\]]*|\[(?:[^\]]*|\[[^\]]*\])*\])*\])*\])*';
|
||||
self::$JSON_STRING = '"(?:\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\0-\x09\x0a-\x1f\\\\"])+"';
|
||||
self::$JSON_VALUE = '(?:[0-9.]+|null|true|false|'.self::$JSON_STRING.'|\['.self::$RECURSE_ARRAYS.'\]|\{'.self::$RECURSE_BLOCKS.'\})';
|
||||
}
|
||||
|
||||
$contents = trim($contents);
|
||||
|
|
|
@ -228,6 +228,54 @@ class JsonManipulatorTest extends \PHPUnit_Framework_TestCase
|
|||
"foo": "qux"
|
||||
}
|
||||
}
|
||||
'
|
||||
),
|
||||
array(
|
||||
'{
|
||||
"repositories": [{
|
||||
"type": "package",
|
||||
"package": {
|
||||
"bar": "ba[z",
|
||||
"dist": {
|
||||
"url": "http...",
|
||||
"type": "zip"
|
||||
},
|
||||
"autoload": {
|
||||
"classmap": [ "foo/bar" ]
|
||||
}
|
||||
}
|
||||
}],
|
||||
"require": {
|
||||
"php": "5.*"
|
||||
},
|
||||
"require-dev": {
|
||||
"foo": "bar"
|
||||
}
|
||||
}',
|
||||
'require-dev',
|
||||
'foo',
|
||||
'qux',
|
||||
'{
|
||||
"repositories": [{
|
||||
"type": "package",
|
||||
"package": {
|
||||
"bar": "ba[z",
|
||||
"dist": {
|
||||
"url": "http...",
|
||||
"type": "zip"
|
||||
},
|
||||
"autoload": {
|
||||
"classmap": [ "foo/bar" ]
|
||||
}
|
||||
}
|
||||
}],
|
||||
"require": {
|
||||
"php": "5.*"
|
||||
},
|
||||
"require-dev": {
|
||||
"foo": "qux"
|
||||
}
|
||||
}
|
||||
'
|
||||
),
|
||||
);
|
||||
|
@ -468,6 +516,24 @@ class JsonManipulatorTest extends \PHPUnit_Framework_TestCase
|
|||
"package": { "bar": "ba}z" }
|
||||
}
|
||||
}
|
||||
}',
|
||||
'bar',
|
||||
false
|
||||
),
|
||||
'fails on deep arrays with borked texts' => array(
|
||||
'{
|
||||
"repositories": [{
|
||||
"package": { "bar": "ba[z" }
|
||||
}]
|
||||
}',
|
||||
'bar',
|
||||
false
|
||||
),
|
||||
'fails on deep arrays with borked texts2' => array(
|
||||
'{
|
||||
"repositories": [{
|
||||
"package": { "bar": "ba]z" }
|
||||
}]
|
||||
}',
|
||||
'bar',
|
||||
false
|
||||
|
|
Loading…
Reference in New Issue