1
0
Fork 0

Fixed the Filesystem methods for a directory with a name that is a substring of a another directory

pull/1979/head
Martin Hasoň 2013-06-07 13:20:17 +02:00
parent f4baa50a05
commit 81e41bac4b
2 changed files with 6 additions and 2 deletions

View File

@ -213,7 +213,7 @@ class Filesystem
return './'.basename($to); return './'.basename($to);
} }
$commonPath = $to; $commonPath = $to.'/';
while (strpos($from, $commonPath) !== 0 && '/' !== $commonPath && !preg_match('{^[a-z]:/?$}i', $commonPath) && '.' !== $commonPath) { while (strpos($from, $commonPath) !== 0 && '/' !== $commonPath && !preg_match('{^[a-z]:/?$}i', $commonPath) && '.' !== $commonPath) {
$commonPath = strtr(dirname($commonPath), '\\', '/'); $commonPath = strtr(dirname($commonPath), '\\', '/');
} }
@ -250,7 +250,7 @@ class Filesystem
return $directories ? '__DIR__' : '__FILE__'; return $directories ? '__DIR__' : '__FILE__';
} }
$commonPath = $to; $commonPath = $to.'/';
while (strpos($from, $commonPath) !== 0 && '/' !== $commonPath && !preg_match('{^[a-z]:/?$}i', $commonPath) && '.' !== $commonPath) { while (strpos($from, $commonPath) !== 0 && '/' !== $commonPath && !preg_match('{^[a-z]:/?$}i', $commonPath) && '.' !== $commonPath) {
$commonPath = strtr(dirname($commonPath), '\\', '/'); $commonPath = strtr(dirname($commonPath), '\\', '/');
} }

View File

@ -58,6 +58,8 @@ class FilesystemTest extends TestCase
array('/tmp/test/.././vendor', '/tmp/test', true, "dirname(__DIR__).'/test'"), array('/tmp/test/.././vendor', '/tmp/test', true, "dirname(__DIR__).'/test'"),
array('C:/Temp', 'c:\Temp\..\..\test', true, "dirname(__DIR__).'/test'"), array('C:/Temp', 'c:\Temp\..\..\test', true, "dirname(__DIR__).'/test'"),
array('C:/Temp/../..', 'd:\Temp\..\..\test', true, "'d:/test'"), array('C:/Temp/../..', 'd:\Temp\..\..\test', true, "'d:/test'"),
array('/foo/bar', '/foo/bar_vendor', true, "dirname(__DIR__).'/bar_vendor'"),
array('/foo/bar_vendor', '/foo/bar', true, "dirname(__DIR__).'/bar'"),
); );
} }
@ -103,6 +105,8 @@ class FilesystemTest extends TestCase
array('C:/Temp', 'c:\Temp\..\..\test', "../test", true), array('C:/Temp', 'c:\Temp\..\..\test', "../test", true),
array('C:/Temp/../..', 'c:\Temp\..\..\test', "./test", true), array('C:/Temp/../..', 'c:\Temp\..\..\test', "./test", true),
array('/tmp', '/tmp/../../test', '/test', true), array('/tmp', '/tmp/../../test', '/test', true),
array('/foo/bar', '/foo/bar_vendor', '../bar_vendor', true),
array('/foo/bar_vendor', '/foo/bar', '../bar', true),
); );
} }