]> source.dussan.org Git - nextcloud-server.git/commitdiff
adding check isDeletable() on $sourcePath
authorThomas Müller <thomas.mueller@tmit.eu>
Tue, 8 Oct 2013 09:43:44 +0000 (11:43 +0200)
committerThomas Müller <thomas.mueller@tmit.eu>
Tue, 8 Oct 2013 09:43:44 +0000 (11:43 +0200)
lib/private/connector/sabre/objecttree.php
tests/lib/connector/sabre/objecttree.php

index 80c3840b99d9fa95bd34bc7a4625a124b54e9cc0..df8902f66e2566a7e203949d235d4f9d2bcd72b2 100644 (file)
@@ -87,6 +87,9 @@ class ObjectTree extends \Sabre_DAV_ObjectTree {
                        if (!$fs->isUpdatable($destinationDir)) {
                                throw new \Sabre_DAV_Exception_Forbidden();
                        }
+                       if (!$fs->isDeletable($sourcePath)) {
+                               throw new \Sabre_DAV_Exception_Forbidden();
+                       }
                }
 
                $renameOkay = $fs->rename($sourcePath, $destinationPath);
index 1d76bb596766035b264b4ebf9ce67efd6e615460..e32f2365f9515ff0e1f045ae328bc8e9ae7f3bd4 100644 (file)
@@ -15,8 +15,9 @@ use Sabre_DAV_Exception_Forbidden;
 
 class TestDoubleFileView extends \OC\Files\View{
 
-       public function __construct($updatables, $canRename = true) {
+       public function __construct($updatables, $deletables, $canRename = true) {
                $this->updatables = $updatables;
+               $this->deletables = $deletables;
                $this->canRename = $canRename;
        }
 
@@ -24,6 +25,10 @@ class TestDoubleFileView extends \OC\Files\View{
                return $this->updatables[$path];
        }
 
+       public function isDeletable($path) {
+               return $this->deletables[$path];
+       }
+
        public function rename($path1, $path2) {
                return $this->canRename;
        }
@@ -35,31 +40,32 @@ class ObjectTree extends PHPUnit_Framework_TestCase {
         * @dataProvider moveFailedProvider
         * @expectedException Sabre_DAV_Exception_Forbidden
         */
-       public function testMoveFailed($source, $dest, $updatables) {
-               $this->moveTest($source, $dest, $updatables);
+       public function testMoveFailed($source, $dest, $updatables, $deletables) {
+               $this->moveTest($source, $dest, $updatables, $deletables);
        }
 
        /**
         * @dataProvider moveSuccessProvider
         */
-       public function testMoveSuccess($source, $dest, $updatables) {
-               $this->moveTest($source, $dest, $updatables);
+       public function testMoveSuccess($source, $dest, $updatables, $deletables) {
+               $this->moveTest($source, $dest, $updatables, $deletables);
                $this->assertTrue(true);
        }
 
        function moveFailedProvider() {
                return array(
-                       array('a/b', 'a/c', array('a' => false, 'a/b' => false, 'a/c' => false)),
-                       array('a/b', 'b/b', array('a' => false, 'a/b' => false, 'b' => false, 'b/b' => false)),
-                       array('a/b', 'b/b', array('a' => false, 'a/b' => true, 'b' => false, 'b/b' => false)),
-                       array('a/b', 'b/b', array('a' => true, 'a/b' => true, 'b' => false, 'b/b' => false)),
+                       array('a/b', 'a/c', array('a' => false, 'a/b' => false, 'a/c' => false), array()),
+                       array('a/b', 'b/b', array('a' => false, 'a/b' => false, 'b' => false, 'b/b' => false), array()),
+                       array('a/b', 'b/b', array('a' => false, 'a/b' => true, 'b' => false, 'b/b' => false), array()),
+                       array('a/b', 'b/b', array('a' => true, 'a/b' => true, 'b' => false, 'b/b' => false), array()),
+                       array('a/b', 'b/b', array('a' => true, 'a/b' => true, 'b' => true, 'b/b' => false), array('a/b' => false)),
                );
        }
 
        function moveSuccessProvider() {
                return array(
-                       array('a/b', 'a/c', array('a' => false, 'a/b' => true, 'a/c' => false)),
-                       array('a/b', 'b/b', array('a' => true, 'a/b' => true, 'b' => true, 'b/b' => false)),
+                       array('a/b', 'a/c', array('a' => false, 'a/b' => true, 'a/c' => false), array()),
+                       array('a/b', 'b/b', array('a' => true, 'a/b' => true, 'b' => true, 'b/b' => false), array('a/b' => true)),
                );
        }
 
@@ -68,7 +74,7 @@ class ObjectTree extends PHPUnit_Framework_TestCase {
         * @param $dest
         * @param $updatables
         */
-       private function moveTest($source, $dest, $updatables) {
+       private function moveTest($source, $dest, $updatables, $deletables) {
                $rootDir = new OC_Connector_Sabre_Directory('');
                $objectTree = $this->getMock('\OC\Connector\Sabre\ObjectTree',
                        array('nodeExists', 'getNodeForPath'),
@@ -80,7 +86,7 @@ class ObjectTree extends PHPUnit_Framework_TestCase {
                        ->will($this->returnValue(false));
 
                /** @var $objectTree \OC\Connector\Sabre\ObjectTree */
-               $objectTree->fileView = new TestDoubleFileView($updatables);
+               $objectTree->fileView = new TestDoubleFileView($updatables, $deletables);
                $objectTree->move($source, $dest);
        }