diff options
author | Robin Appelman <icewind@owncloud.com> | 2015-06-01 15:08:14 +0300 |
---|---|---|
committer | Robin Appelman <icewind@owncloud.com> | 2015-06-29 15:13:19 +0300 |
commit | 4e85a426a4af6f64292abf315aad8fc7a12b0cee (patch) | |
tree | 6db3640745f6f6a5a7894e3f40a047dbb624e61a | |
parent | 8a1cfa4229d0d77fa863dca64d4a434c7c03f806 (diff) |
emit hooks from a view as long as the path is inside the default root
-rw-r--r-- | lib/private/files/view.php | 3 | ||||
-rw-r--r-- | tests/lib/files/view.php | 29 |
2 files changed, 31 insertions, 1 deletions
diff --git a/lib/private/files/view.php b/lib/private/files/view.php index b07225cca56..ae1cb8913a5 100644 --- a/lib/private/files/view.php +++ b/lib/private/files/view.php @@ -898,7 +898,8 @@ class View { if ($this->fakeRoot === $defaultRoot) { return true; } - return (strlen($this->fakeRoot) > strlen($defaultRoot)) && (substr($this->fakeRoot, 0, strlen($defaultRoot) + 1) === $defaultRoot . '/'); + $fullPath = $this->getAbsolutePath($path); + return (strlen($fullPath) > strlen($defaultRoot)) && (substr($fullPath, 0, strlen($defaultRoot) + 1) === $defaultRoot . '/'); } /** diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php index f064eaaa7fd..c595afb5022 100644 --- a/tests/lib/files/view.php +++ b/tests/lib/files/view.php @@ -1050,4 +1050,33 @@ class View extends \Test\TestCase { public function testNullAsRoot() { new \OC\Files\View(null); } + + public function hookPathProvider() { + return [ + ['/foo/files', '/foo', true], + ['/foo/files/bar', '/foo', true], + ['/foo', '/foo', false], + ['/foo', '/files/foo', true], + ['/foo', 'filesfoo', false] + ]; + } + + /** + * @dataProvider hookPathProvider + * @param $root + * @param $path + * @param $shouldEmit + */ + public function testHookPaths($root, $path, $shouldEmit) { + $filesystemReflection = new \ReflectionClass('\OC\Files\Filesystem'); + $defaultRootValue = $filesystemReflection->getProperty('defaultInstance'); + $defaultRootValue->setAccessible(true); + $oldRoot = $defaultRootValue->getValue(); + $defaultView = new \OC\Files\View('/foo/files'); + $defaultRootValue->setValue($defaultView); + $view = new \OC\Files\View($root); + $result = \Test_Helper::invokePrivate($view, 'shouldEmitHooks', [$path]); + $defaultRootValue->setValue($oldRoot); + $this->assertEquals($shouldEmit, $result); + } } |