made some tweak to the security check for the filesystem loader
authorFabien Potencier <fabien.potencier@gmail.com>
Tue, 14 Dec 2010 16:24:03 +0000 (17:24 +0100)
committerFabien Potencier <fabien.potencier@gmail.com>
Tue, 14 Dec 2010 16:24:03 +0000 (17:24 +0100)
lib/Twig/Loader/Filesystem.php
test/Twig/Tests/Loader/FilesystemTest.php

index 7fb2b7d..6ec0dfb 100644 (file)
@@ -102,7 +102,7 @@ class Twig_Loader_Filesystem implements Twig_LoaderInterface
     protected function findTemplate($name)
     {
         // normalize name
-        $name = str_replace('\\', '/', $name);
+        $name = preg_replace('#(/+|\\+)#', '/', str_replace('\\', '/', $name));
 
         $parts = explode('/', $name);
         $level = 0;
index a539686..30d0c4d 100644 (file)
@@ -25,7 +25,9 @@ class Twig_Tests_Loader_FilesystemTest extends PHPUnit_Framework_TestCase
     {
         return array(
             array('..\\AutoloaderTest.php'),
+            array('..\\\\\\AutoloaderTest.php'),
             array('../AutoloaderTest.php'),
+            array('..////AutoloaderTest.php'),
             array('./../AutoloaderTest.php'),
             array('.\\..\\AutoloaderTest.php'),
             array('././././././../AutoloaderTest.php'),
@@ -35,6 +37,10 @@ class Twig_Tests_Loader_FilesystemTest extends PHPUnit_Framework_TestCase
             array('foo/../bar/../../AutoloaderTest.php'),
             array('foo/bar/../../../AutoloaderTest.php'),
             array('filters/../../AutoloaderTest.php'),
+            array('filters//..//..//AutoloaderTest.php'),
+            array('filters\\..\\..\\AutoloaderTest.php'),
+            array('filters\\\\..\\\\..\\\\AutoloaderTest.php'),
+            array('filters\\//../\\/\\..\\AutoloaderTest.php'),
         );
     }
 }