diff options
-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)); + + } } |