From 2b83afdd7ebd9d211aa25203eaa15e978bef173c Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Wed, 4 Feb 2015 12:07:16 +0100 Subject: detect root of mountpoint also if the trailing slash is missed --- lib/private/files/view.php | 5 +++++ tests/lib/files/view.php | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/lib/private/files/view.php b/lib/private/files/view.php index 7609dbe536c..a3f4e9e0719 100644 --- a/lib/private/files/view.php +++ b/lib/private/files/view.php @@ -87,6 +87,11 @@ class View { if ($this->fakeRoot == '') { return $path; } + + if (rtrim($path,'/') === rtrim($this->fakeRoot, '/')) { + return '/'; + } + if (strpos($path, $this->fakeRoot) !== 0) { return null; } else { diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php index ce78896b152..837690a6902 100644 --- a/tests/lib/files/view.php +++ b/tests/lib/files/view.php @@ -695,6 +695,28 @@ class View extends \PHPUnit_Framework_TestCase { ); } + /** + * @dataProvider relativePathProvider + */ + function testGetRelativePath($absolutePath, $expectedPath) { + $view = new \OC\Files\View('/files'); + // simulate a external storage mount point which has a trailing slash + $view->chroot('/files/'); + $this->assertEquals($expectedPath, $view->getRelativePath($absolutePath)); + } + + function relativePathProvider() { + return array( + array('/files/', '/'), + array('/files', '/'), + array('/files/0', '0'), + array('/files/false', 'false'), + array('/files/true', 'true'), + array('/files/test', 'test'), + array('/files/test/foo', 'test/foo'), + ); + } + /** * @dataProvider tooLongPathDataProvider * @expectedException \OCP\Files\InvalidPathException -- cgit v1.2.3