Browse Source

file helper did not preserve relative paths

tags/2.0.0-rc
Carsten Brandt 11 years ago
parent
commit
78a8694eb5
  1. 2
      framework/helpers/BaseFileHelper.php
  2. 8
      tests/unit/framework/helpers/FileHelperTest.php

2
framework/helpers/BaseFileHelper.php

@ -48,7 +48,7 @@ class BaseFileHelper
// the path may contain ".", ".." or double slashes, need to clean them up
$parts = [];
foreach (explode($ds, $path) as $part) {
if ($part === '..' && !empty($parts)) {
if ($part === '..' && !empty($parts) && end($parts) !== '..') {
array_pop($parts);
} elseif ($part === '.' || $part === '' && !empty($parts)) {
continue;

8
tests/unit/framework/helpers/FileHelperTest.php

@ -367,6 +367,14 @@ class FileHelperTest extends TestCase
$this->assertEquals("{$ds}c", FileHelper::normalizePath('/a/.\\b//../../c'));
$this->assertEquals("c", FileHelper::normalizePath('/a/.\\b/../..//../c'));
$this->assertEquals("..{$ds}c", FileHelper::normalizePath('//a/.\\b//..//..//../../c'));
// relative paths
$this->assertEquals("..{$ds}..{$ds}a", FileHelper::normalizePath('../..\\a'));
$this->assertEquals("..{$ds}..{$ds}a", FileHelper::normalizePath('../..\\a/../a'));
$this->assertEquals("..{$ds}..{$ds}b", FileHelper::normalizePath('../..\\a/../b'));
$this->assertEquals("..{$ds}a", FileHelper::normalizePath('./..\\a'));
$this->assertEquals("..{$ds}a", FileHelper::normalizePath('./..\\a/../a'));
$this->assertEquals("..{$ds}b", FileHelper::normalizePath('./..\\a/../b'));
}
public function testLocalizedDirectory()

Loading…
Cancel
Save