Add support for nested arrays in the json manipulator, fixes #3296
parent
eba04dc211
commit
55a6a1c3d4
|
@ -18,6 +18,7 @@ namespace Composer\Json;
|
||||||
class JsonManipulator
|
class JsonManipulator
|
||||||
{
|
{
|
||||||
private static $RECURSE_BLOCKS;
|
private static $RECURSE_BLOCKS;
|
||||||
|
private static $RECURSE_ARRAYS;
|
||||||
private static $JSON_VALUE;
|
private static $JSON_VALUE;
|
||||||
private static $JSON_STRING;
|
private static $JSON_STRING;
|
||||||
|
|
||||||
|
@ -29,8 +30,9 @@ class JsonManipulator
|
||||||
{
|
{
|
||||||
if (!self::$RECURSE_BLOCKS) {
|
if (!self::$RECURSE_BLOCKS) {
|
||||||
self::$RECURSE_BLOCKS = '(?:[^{}]*|\{(?:[^{}]*|\{(?:[^{}]*|\{(?:[^{}]*|\{[^{}]*\})*\})*\})*\})*';
|
self::$RECURSE_BLOCKS = '(?:[^{}]*|\{(?:[^{}]*|\{(?:[^{}]*|\{(?:[^{}]*|\{[^{}]*\})*\})*\})*\})*';
|
||||||
self::$JSON_STRING = '"(?:\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\0-\x09\x0a-\x1f\\\\"])*"';
|
self::$RECURSE_ARRAYS = '(?:[^\]]*|\[(?:[^\]]*|\[(?:[^\]]*|\[(?:[^\]]*|\[[^\]]*\])*\])*\])*\])*';
|
||||||
self::$JSON_VALUE = '(?:[0-9.]+|null|true|false|'.self::$JSON_STRING.'|\[[^\]]*\]|\{'.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_ARRAYS.'\]|\{'.self::$RECURSE_BLOCKS.'\})';
|
||||||
}
|
}
|
||||||
|
|
||||||
$contents = trim($contents);
|
$contents = trim($contents);
|
||||||
|
|
|
@ -228,6 +228,54 @@ class JsonManipulatorTest extends \PHPUnit_Framework_TestCase
|
||||||
"foo": "qux"
|
"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" }
|
"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',
|
'bar',
|
||||||
false
|
false
|
||||||
|
|
Loading…
Reference in New Issue