diff --git a/lib/private/files/cache/updater.php b/lib/private/files/cache/updater.php index 9f4cbfeff8..eeb763921b 100644 --- a/lib/private/files/cache/updater.php +++ b/lib/private/files/cache/updater.php @@ -45,7 +45,7 @@ class Updater { * @param int $time */ public function update($path, $time = null) { - if(Scanner::isPartialFile($path)) { + if (Scanner::isPartialFile($path)) { return; } /** @@ -116,6 +116,9 @@ class Updater { if ($sourceStorage && $targetStorage) { if ($sourceStorage === $targetStorage) { $cache = $sourceStorage->getCache($sourceInternalPath); + if ($cache->inCache($targetInternalPath)) { + $cache->remove($targetInternalPath); + } $cache->move($sourceInternalPath, $targetInternalPath); if (pathinfo($sourceInternalPath, PATHINFO_EXTENSION) !== pathinfo($targetInternalPath, PATHINFO_EXTENSION)) { diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php index 0d88ec1d66..db39df7d16 100644 --- a/tests/lib/files/view.php +++ b/tests/lib/files/view.php @@ -962,4 +962,17 @@ class View extends \Test\TestCase { public function testConstructDirectoryTraversalException($root) { new \OC\Files\View($root); } + + public function testRenameOverWrite() { + $storage = new Temporary(array()); + $scanner = $storage->getScanner(); + $storage->mkdir('sub'); + $storage->mkdir('foo'); + $storage->file_put_contents('foo.txt', 'asd'); + $storage->file_put_contents('foo/bar.txt', 'asd'); + $scanner->scan(''); + \OC\Files\Filesystem::mount($storage, array(), '/test/'); + $view = new \OC\Files\View(''); + $this->assertTrue($view->rename('/test/foo.txt', '/test/foo/bar.txt')); + } }