summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/files/view.php9
-rw-r--r--tests/lib/files/view.php22
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));
+
+ }
}