From acb02e08b7bc0cc5e0b34fa7ca48d45aacdd4351 Mon Sep 17 00:00:00 2001 From: Lukas Schaefer Date: Mon, 21 Sep 2026 12:07:45 +0200 Subject: [PATCH] fix: skip invalid folder creation Signed-off-by: Lukas Schaefer --- lib/Service/GoogleDriveAPIService.php | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/Service/GoogleDriveAPIService.php b/lib/Service/GoogleDriveAPIService.php index 5744f3c0..a0c908c0 100644 --- a/lib/Service/GoogleDriveAPIService.php +++ b/lib/Service/GoogleDriveAPIService.php @@ -385,6 +385,9 @@ public function hasBeenCancelled(string $userId): bool { * @throws Exception */ private function touchFolder(array $dirInfo): void { + if (!isset($dirInfo['node']) || !($dirInfo['node'] instanceof Folder)) { + return; + } if (isset($dirInfo['modifiedTime']) && $dirInfo['modifiedTime'] !== null) { $d = new DateTime($dirInfo['modifiedTime']); $ts = $d->getTimestamp(); @@ -531,13 +534,18 @@ private function createDirsUnder(array &$directoriesById, Folder $currentFolder, if (($currentFolderId === '' && !array_key_exists($parentId, $directoriesById)) || $parentId === $currentFolderId) { $name = $this->fileUtils->sanitizeFilename((string)($dir['name']), (string)$id); - if (!$currentFolder->nodeExists($name)) { - $newDir = $currentFolder->newFolder($name); - } else { - $newDir = $currentFolder->get($name); - if (!($newDir instanceof Folder)) { - return false; + try { + if (!$currentFolder->nodeExists($name)) { + $newDir = $currentFolder->newFolder($name); + } else { + $newDir = $currentFolder->get($name); + if (!($newDir instanceof Folder)) { + return false; + } } + } catch (InvalidPathException) { + $this->logger->warning('Skipping Drive directory with invalid path', ['name' => $name, 'id' => $id, 'parentId' => $parentId]); + continue; } $directoriesById[$id]['node'] = $newDir; $success = $this->createDirsUnder($directoriesById, $newDir, (string)$id);