Ver código fonte

Merge pull request #1919 from DavidMikeSimon/master

Bugfix: Classmap parsing of PHP source with weird escape-like pattern
Jordi Boggiano 12 anos atrás
pai
commit
978ba292a6

+ 1 - 1
src/Composer/Autoload/ClassMapGenerator.php

@@ -115,7 +115,7 @@ class ClassMapGenerator
         // strip heredocs/nowdocs
         $contents = preg_replace('{<<<\'?(\w+)\'?(?:\r\n|\n|\r)(?:.*?)(?:\r\n|\n|\r)\\1(?=\r\n|\n|\r|;)}s', 'null', $contents);
         // strip strings
-        $contents = preg_replace('{"[^"\\\\]*(\\\\.[^"\\\\]*)*"|\'[^\'\\\\]*(\\\\.[^\'\\\\]*)*\'}', 'null', $contents);
+        $contents = preg_replace('{"[^"\\\\]*(\\\\.[^"\\\\]*)*"|\'[^\'\\\\]*(\\\\.[^\'\\\\]*)*\'}s', 'null', $contents);
         // strip leading non-php code if needed
         if (substr($contents, 0, 2) !== '<?') {
             $contents = preg_replace('{^.+?<\?}s', '<?', $contents);

+ 2 - 0
tests/Composer/Test/Autoload/ClassMapGeneratorTest.php

@@ -55,6 +55,8 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
                 'Foo\\LargeGap'           => realpath(__DIR__).'/Fixtures/classmap/LargeGap.php',
                 'Foo\\MissingSpace'       => realpath(__DIR__).'/Fixtures/classmap/MissingSpace.php',
                 'Foo\\StripNoise'         => realpath(__DIR__).'/Fixtures/classmap/StripNoise.php',
+                'Foo\\SlashedA'           => realpath(__DIR__).'/Fixtures/classmap/BackslashLineEndingString.php',
+                'Foo\\SlashedB'           => realpath(__DIR__).'/Fixtures/classmap/BackslashLineEndingString.php',
                 'Unicode\\↑\\↑'              => realpath(__DIR__).'/Fixtures/classmap/Unicode.php',
             )),
             array(__DIR__.'/Fixtures/template', array()),

+ 16 - 0
tests/Composer/Test/Autoload/Fixtures/classmap/BackslashLineEndingString.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace Foo;
+
+class SlashedA {
+    function foo() {
+        return sprintf("foo\
+                        bar");
+    }
+}
+
+class SlashedB {
+    function bar() {
+        print "baz";
+    }
+}