Fix normalization of relative paths going up a few dirs, fixes #1759

main
Jordi Boggiano 11 years ago
parent 57c34033ff
commit f744ec16f5

@ -318,10 +318,12 @@ class Filesystem
$path = substr($path, strlen($prefix));
}
$appended = false;
foreach (explode('/', $path) as $chunk) {
if ('..' === $chunk) {
if ('..' === $chunk && $appended) {
array_pop($parts);
} elseif ('.' !== $chunk && '' !== $chunk) {
$appended = true;
$parts[] = $chunk;
}
}

@ -139,4 +139,27 @@ class FilesystemTest extends TestCase
$fs = new Filesystem;
$this->assertGreaterThanOrEqual(10, $fs->size("$tmp/composer_testdir"));
}
/**
* @dataProvider provideNormalizedPaths
*/
public function testNormalizePath($expected, $actual)
{
$fs = new Filesystem;
$this->assertEquals($expected, $fs->normalizePath($actual));
}
public function provideNormalizedPaths()
{
return array(
array('../foo', '../foo'),
array('c:/foo/bar', 'c:/foo//bar'),
array('C:/foo/bar', 'C:/foo/./bar'),
array('C:/bar', 'C:/foo/../bar'),
array('/bar', '/foo/../bar/'),
array('phar://c:/Foo', 'phar://c:/Foo/Bar/..'),
array('phar://c:/', 'phar://c:/Foo/Bar/../../../..'),
array('/', '/Foo/Bar/../../../..'),
);
}
}

Loading…
Cancel
Save