From 9277a17a3c595f1dd57232e5d9c361d685c764b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Fri, 26 Sep 2025 15:11:36 +0200 Subject: [PATCH] fix: Flag folder objects that got deleted to recreate them if needed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AppData caches folder objects, and several places get them to delete them, so afterwards if the folder gets reused in the same session an error happens. This is the case in unit tests with user avatars. Signed-off-by: Côme Chilliet --- lib/private/Files/Node/Folder.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php index 7453b553119..b747406e4df 100644 --- a/lib/private/Files/Node/Folder.php +++ b/lib/private/Files/Node/Folder.php @@ -31,6 +31,8 @@ class Folder extends Node implements \OCP\Files\Folder { private ?IUserManager $userManager = null; + private bool $wasDeleted = false; + /** * Creates a Folder that represents a non-existing path * @@ -162,6 +164,7 @@ class Folder extends Node implements \OCP\Files\Folder { if ($path === '') { throw new NotPermittedException('Could not create as provided path is empty'); } + $this->recreateIfNeeded(); if ($this->checkPermissions(\OCP\Constants::PERMISSION_CREATE)) { $fullPath = $this->getFullPath($path); $nonExisting = new NonExistingFile($this->root, $this->view, $fullPath); @@ -377,6 +380,7 @@ class Folder extends Node implements \OCP\Files\Folder { $this->view->rmdir($this->path); $nonExisting = new NonExistingFolder($this->root, $this->view, $this->path, $fileInfo); $this->sendHooks(['postDelete'], [$nonExisting]); + $this->wasDeleted = true; } else { throw new NotPermittedException('No delete permission for path "' . $this->path . '"'); } @@ -469,4 +473,11 @@ class Folder extends Node implements \OCP\Files\Folder { $readonly, ); } + + private function recreateIfNeeded(): void { + if ($this->wasDeleted) { + $this->newFolder(''); + $this->wasDeleted = false; + } + } }