diff --git a/src/Composer/Json/JsonFile.php b/src/Composer/Json/JsonFile.php index cba1e28de..60c601175 100644 --- a/src/Composer/Json/JsonFile.php +++ b/src/Composer/Json/JsonFile.php @@ -122,7 +122,7 @@ class JsonFile case JSON_ERROR_SYNTAX: $msg = 'Syntax error'; $charOffset = 0; - if (preg_match('#["}\]]\s*(,)\s*\}#', $json, $match, PREG_OFFSET_CAPTURE)) { + if (preg_match('#["}\]]\s*(,)\s*[}\]]#', $json, $match, PREG_OFFSET_CAPTURE)) { $msg .= ', extra comma'; } elseif (preg_match('#(["}\]]) *\r?\n *"#', $json, $match, PREG_OFFSET_CAPTURE)) { $msg .= ', missing comma'; diff --git a/tests/Composer/Test/Json/JsonFileTest.php b/tests/Composer/Test/Json/JsonFileTest.php index e25f86fdf..b1f46678a 100644 --- a/tests/Composer/Test/Json/JsonFileTest.php +++ b/tests/Composer/Test/Json/JsonFileTest.php @@ -24,6 +24,16 @@ class JsonFileTest extends \PHPUnit_Framework_TestCase $this->expectParseException('extra comma on line 2, char 21', $json); } + public function testParseErrorDetectExtraCommaInArray() + { + $json = '{ + "foo": [ + "bar", + ] +}'; + $this->expectParseException('extra comma on line 3, char 18', $json); + } + public function testParseErrorDetectSingleQuotes() { $json = '{