Trim leading or trailing slashes in file cache paths

This commit is contained in:
Vincent Petry 2015-01-08 19:43:02 +01:00
parent 10505bdb0d
commit aa821ecc00
2 changed files with 37 additions and 1 deletions

View File

@ -699,6 +699,6 @@ class Cache {
*/
public function normalize($path) {
return \OC_Util::normalizeUnicode($path);
return trim(\OC_Util::normalizeUnicode($path), '/');
}
}

View File

@ -517,6 +517,42 @@ class Cache extends \Test\TestCase {
$this->assertEquals(1, count($this->cache->getFolderContents('folder')));
}
function bogusPathNamesProvider() {
return array(
array('/bogus.txt', 'bogus.txt'),
array('//bogus.txt', 'bogus.txt'),
array('bogus/', 'bogus'),
array('bogus//', 'bogus'),
);
}
/**
* Test bogus paths with leading or doubled slashes
*
* @dataProvider bogusPathNamesProvider
*/
public function testBogusPaths($bogusPath, $fixedBogusPath) {
$data = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory');
// put root folder
$this->assertFalse($this->cache->get(''));
$parentId = $this->cache->put('', $data);
$this->assertGreaterThan(0, $parentId);
$this->assertGreaterThan(0, $this->cache->put($bogusPath, $data));
$newData = $this->cache->get($fixedBogusPath);
$this->assertNotFalse($newData);
$this->assertEquals($fixedBogusPath, $newData['path']);
// parent is the correct one, resolved properly (they used to not be)
$this->assertEquals($parentId, $newData['parent']);
$newDataFromBogus = $this->cache->get($bogusPath);
// same entry
$this->assertEquals($newData, $newDataFromBogus);
}
protected function tearDown() {
if ($this->cache) {
$this->cache->clear();