Simplify isValidPath and add unit tests
The check for invalid paths is actually over-complicated and performed twice resulting in a performance penalty. Additionally, I decided to add unit-tests to that function. Part of https://github.com/owncloud/core/issues/13221
This commit is contained in:
parent
59a1d16d0f
commit
05615bfd47
|
@ -502,7 +502,7 @@ class Filesystem {
|
||||||
if (!$path || $path[0] !== '/') {
|
if (!$path || $path[0] !== '/') {
|
||||||
$path = '/' . $path;
|
$path = '/' . $path;
|
||||||
}
|
}
|
||||||
if (strstr($path, '/../') || strrchr($path, '/') === '/..') {
|
if (strpos($path, '/../') !== FALSE || strrchr($path, '/') === '/..') {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -154,6 +154,39 @@ class Filesystem extends \Test\TestCase {
|
||||||
$this->assertEquals($expected, \OC\Files\Filesystem::normalizePath($path, $stripTrailingSlash));
|
$this->assertEquals($expected, \OC\Files\Filesystem::normalizePath($path, $stripTrailingSlash));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isValidPathData() {
|
||||||
|
return array(
|
||||||
|
array('/', true),
|
||||||
|
array('/path', true),
|
||||||
|
array('/foo/bar', true),
|
||||||
|
array('/foo//bar/', true),
|
||||||
|
array('/foo////bar', true),
|
||||||
|
array('/foo//\///bar', true),
|
||||||
|
array('/foo/bar/.', true),
|
||||||
|
array('/foo/bar/./', true),
|
||||||
|
array('/foo/bar/./.', true),
|
||||||
|
array('/foo/bar/././', true),
|
||||||
|
array('/foo/bar/././..bar', true),
|
||||||
|
array('/foo/bar/././..bar/a', true),
|
||||||
|
array('/foo/bar/././..', false),
|
||||||
|
array('/foo/bar/././../', false),
|
||||||
|
array('/foo/bar/.././', false),
|
||||||
|
array('/foo/bar/../../', false),
|
||||||
|
array('/foo/bar/../..\\', false),
|
||||||
|
array('..', false),
|
||||||
|
array('../', false),
|
||||||
|
array('../foo/bar', false),
|
||||||
|
array('..\foo/bar', false),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider isValidPathData
|
||||||
|
*/
|
||||||
|
public function testIsValidPath($path, $expected) {
|
||||||
|
$this->assertSame($expected, \OC\Files\Filesystem::isValidPath($path));
|
||||||
|
}
|
||||||
|
|
||||||
public function normalizePathWindowsAbsolutePathData() {
|
public function normalizePathWindowsAbsolutePathData() {
|
||||||
return array(
|
return array(
|
||||||
array('C:/', 'C:\\'),
|
array('C:/', 'C:\\'),
|
||||||
|
|
Loading…
Reference in New Issue