From: Daniel Kesselberg Date: Fri, 2 Jun 2023 20:26:20 +0000 (+0200) Subject: fix(storage): fallback to copy and unlink when rename fails X-Git-Tag: v28.0.0beta1~628^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=refs%2Fpull%2F38623%2Fhead;p=nextcloud-server.git fix(storage): fallback to copy and unlink when rename fails Signed-off-by: Daniel Kesselberg --- diff --git a/lib/private/Files/Storage/Local.php b/lib/private/Files/Storage/Local.php index c0ce0e7021a..fb62a53d894 100644 --- a/lib/private/Files/Storage/Local.php +++ b/lib/private/Files/Storage/Local.php @@ -335,7 +335,7 @@ class Local extends \OC\Files\Storage\Common { } } - public function rename($source, $target) { + public function rename($source, $target): bool { $srcParent = dirname($source); $dstParent = dirname($target); @@ -361,21 +361,14 @@ class Local extends \OC\Files\Storage\Common { } if ($this->is_dir($source)) { - // we can't move folders across devices, use copy instead - $stat1 = stat(dirname($this->getSourcePath($source))); - $stat2 = stat(dirname($this->getSourcePath($target))); - if ($stat1['dev'] !== $stat2['dev']) { - $result = $this->copy($source, $target); - if ($result) { - $result &= $this->rmdir($source); - } - return $result; - } - $this->checkTreeForForbiddenItems($this->getSourcePath($source)); } - return rename($this->getSourcePath($source), $this->getSourcePath($target)); + if (@rename($this->getSourcePath($source), $this->getSourcePath($target))) { + return true; + } + + return $this->copy($source, $target) && $this->rmdir($source); } public function copy($source, $target) {