diff --git a/src/Composer/Json/JsonFile.php b/src/Composer/Json/JsonFile.php index 60c601175..743eb011b 100644 --- a/src/Composer/Json/JsonFile.php +++ b/src/Composer/Json/JsonFile.php @@ -124,6 +124,8 @@ class JsonFile $charOffset = 0; if (preg_match('#["}\]]\s*(,)\s*[}\]]#', $json, $match, PREG_OFFSET_CAPTURE)) { $msg .= ', extra comma'; + } elseif (preg_match('#(\\\\(?!["\\/bfnrt]|u[a-f0-9]{4}))#i', $json, $match, PREG_OFFSET_CAPTURE)) { + $msg .= ', unescaped backslash (\\)'; } elseif (preg_match('#(["}\]]) *\r?\n *"#', $json, $match, PREG_OFFSET_CAPTURE)) { $msg .= ', missing comma'; $charOffset = 1; diff --git a/tests/Composer/Test/Json/JsonFileTest.php b/tests/Composer/Test/Json/JsonFileTest.php index b1f46678a..e5899f769 100644 --- a/tests/Composer/Test/Json/JsonFileTest.php +++ b/tests/Composer/Test/Json/JsonFileTest.php @@ -34,6 +34,14 @@ class JsonFileTest extends \PHPUnit_Framework_TestCase $this->expectParseException('extra comma on line 3, char 18', $json); } + public function testParseErrorDetectUnescapedBackslash() + { + $json = '{ + "fo\o": "bar" +}'; + $this->expectParseException('unescaped backslash (\\) on line 2, char 12', $json); + } + public function testParseErrorDetectSingleQuotes() { $json = '{