Selaa lähdekoodia

Add detection for unescaped backslashes

Jordi Boggiano 13 vuotta sitten
vanhempi
commit
066a0db752
2 muutettua tiedostoa jossa 10 lisäystä ja 0 poistoa
  1. 2 0
      src/Composer/Json/JsonFile.php
  2. 8 0
      tests/Composer/Test/Json/JsonFileTest.php

+ 2 - 0
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;

+ 8 - 0
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 = '{