diff options
author | Vincent Petry <pvince81@owncloud.com> | 2015-06-16 11:40:27 +0200 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2015-06-16 17:03:12 +0200 |
commit | 102c6ffc41ad6fb70b07776b80b4c53528a6abc8 (patch) | |
tree | 7f37d292a66fbd28a611941d885c252ad69cb095 | |
parent | e5d34a273353e651c6609fffe9804a4755d3e80d (diff) | |
download | nextcloud-server-102c6ffc41ad6fb70b07776b80b4c53528a6abc8.tar.gz nextcloud-server-102c6ffc41ad6fb70b07776b80b4c53528a6abc8.zip |
Normalize path in View's lock methods
-rw-r--r-- | lib/private/files/view.php | 9 | ||||
-rw-r--r-- | tests/lib/files/view.php | 22 |
2 files changed, 27 insertions, 4 deletions
diff --git a/lib/private/files/view.php b/lib/private/files/view.php index 1d4654e11fc..39e2fe6bfce 100644 --- a/lib/private/files/view.php +++ b/lib/private/files/view.php @@ -1683,6 +1683,7 @@ class View { */ private function lockPath($path, $type) { $absolutePath = $this->getAbsolutePath($path); + $absolutePath = Filesystem::normalizePath($absolutePath); if (!$this->shouldLockFile($absolutePath)) { return false; } @@ -1717,6 +1718,7 @@ class View { */ public function changeLock($path, $type) { $absolutePath = $this->getAbsolutePath($path); + $absolutePath = Filesystem::normalizePath($absolutePath); if (!$this->shouldLockFile($absolutePath)) { return false; } @@ -1750,6 +1752,7 @@ class View { */ private function unlockPath($path, $type) { $absolutePath = $this->getAbsolutePath($path); + $absolutePath = Filesystem::normalizePath($absolutePath); if (!$this->shouldLockFile($absolutePath)) { return false; } @@ -1774,9 +1777,8 @@ class View { * @return bool False if the path is excluded from locking, true otherwise */ public function lockFile($path, $type) { - $path = '/' . trim($path, '/'); - $absolutePath = $this->getAbsolutePath($path); + $absolutePath = Filesystem::normalizePath($absolutePath); if (!$this->shouldLockFile($absolutePath)) { return false; } @@ -1799,9 +1801,8 @@ class View { * @return bool False if the path is excluded from locking, true otherwise */ public function unlockFile($path, $type) { - $path = rtrim($path, '/'); - $absolutePath = $this->getAbsolutePath($path); + $absolutePath = Filesystem::normalizePath($absolutePath); if (!$this->shouldLockFile($absolutePath)) { return false; } diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php index 63d136bc7a9..dcdebfd9bce 100644 --- a/tests/lib/files/view.php +++ b/tests/lib/files/view.php @@ -1208,4 +1208,26 @@ class View extends \Test\TestCase { $view = new \OC\Files\View(); $view->getPathRelativeToFiles($path); } + + public function testChangeLock() { + $view = new \OC\Files\View('/testuser/files/'); + $storage = new Temporary(array()); + \OC\Files\Filesystem::mount($storage, [], '/'); + + $view->lockFile('/test/sub', ILockingProvider::LOCK_SHARED); + $this->assertTrue($this->isFileLocked($view, '/test//sub', ILockingProvider::LOCK_SHARED)); + $this->assertFalse($this->isFileLocked($view, '/test//sub', ILockingProvider::LOCK_EXCLUSIVE)); + + $view->changeLock('//test/sub', ILockingProvider::LOCK_EXCLUSIVE); + $this->assertTrue($this->isFileLocked($view, '/test//sub', ILockingProvider::LOCK_EXCLUSIVE)); + + $view->changeLock('test/sub', ILockingProvider::LOCK_SHARED); + $this->assertTrue($this->isFileLocked($view, '/test//sub', ILockingProvider::LOCK_SHARED)); + + $view->unlockFile('/test/sub/', ILockingProvider::LOCK_SHARED); + + $this->assertFalse($this->isFileLocked($view, '/test//sub', ILockingProvider::LOCK_SHARED)); + $this->assertFalse($this->isFileLocked($view, '/test//sub', ILockingProvider::LOCK_EXCLUSIVE)); + + } } |