]> source.dussan.org Git - nextcloud-server.git/commitdiff
Delete chunks if the move on an upload failed
authorJulius Härtl <jus@bitgrid.net>
Thu, 6 Aug 2020 09:50:31 +0000 (11:50 +0200)
committerJulius Härtl <jus@bitgrid.net>
Wed, 12 Aug 2020 06:18:46 +0000 (08:18 +0200)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
apps/dav/lib/Upload/ChunkingPlugin.php

index 0a89b144ae1bffbbbae54abfaaef65406c402ceb..d9b4ee44d3944d8ad3d7615d0a6c583103c85e54 100644 (file)
@@ -26,6 +26,7 @@
 namespace OCA\DAV\Upload;
 
 use OCA\DAV\Connector\Sabre\Directory;
+use OCA\DAV\Connector\Sabre\Exception\Forbidden;
 use Sabre\DAV\Exception\BadRequest;
 use Sabre\DAV\Exception\NotFound;
 use Sabre\DAV\INode;
@@ -87,13 +88,16 @@ class ChunkingPlugin extends ServerPlugin {
         * @return bool|void false to stop handling, void to skip this handler
         */
        public function performMove($path, $destination) {
-               if (!$this->server->tree->nodeExists($destination)) {
-                       // skip and let the default handler do its work
-                       return;
-               }
-
                // do a move manually, skipping Sabre's default "delete" for existing nodes
-               $this->server->tree->move($path, $destination);
+               try {
+                       $this->server->tree->move($path, $destination);
+               } catch (Forbidden $e) {
+                       $sourceNode = $this->server->tree->getNodeForPath($path);
+                       if ($sourceNode instanceof FutureFile) {
+                               $sourceNode->delete();
+                       }
+                       throw $e;
+               }
 
                // trigger all default events (copied from CorePlugin::move)
                $this->server->emit('afterMove', [$path, $destination]);