Skip to content

Commit c6aff2f

Browse files
committed
Fix: Improve folder creation error handling and sanitize folder names
Signed-off-by: Ahsan Ahmed <ahmedah05@outlook.com>
1 parent 4d02d2e commit c6aff2f

1 file changed

Lines changed: 16 additions & 11 deletions

File tree

lib/Service/GoogleDriveAPIService.php

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -540,19 +540,24 @@ private function createDirsUnder(array &$directoriesById, Folder $currentFolder,
540540
// create dir if we are on top OR if its parent is current dir
541541
if (($currentFolderId === '' && !array_key_exists($parentId, $directoriesById))
542542
|| $parentId === $currentFolderId) {
543-
$name = $dir['name'];
544-
if (!$currentFolder->nodeExists($name)) {
545-
$newDir = $currentFolder->newFolder($name);
546-
} else {
547-
$newDir = $currentFolder->get($name);
548-
if (!($newDir instanceof Folder)) {
543+
$name = preg_replace('/\/|\n|[^._A-Za-z0-9-]/', '-', $dir['name'] ?? 'Untitled');
544+
try {
545+
if (!$currentFolder->nodeExists($name)) {
546+
$newDir = $currentFolder->newFolder($name);
547+
} else {
548+
$newDir = $currentFolder->get($name);
549+
if (!($newDir instanceof Folder)) {
550+
throw new NotFoundException("Node is not a folder: $name");
551+
}
552+
}
553+
$directoriesById[$id]['node'] = $newDir;
554+
$success = $this->createDirsUnder($directoriesById, $newDir, $id);
555+
if (!$success) {
549556
return false;
550557
}
551-
}
552-
$directoriesById[$id]['node'] = $newDir;
553-
$success = $this->createDirsUnder($directoriesById, $newDir, $id);
554-
if (!$success) {
555-
return false;
558+
} catch (\Throwable $e) {
559+
$this->logger->error("Failed to create folder: $name", ['exception' => $e]);
560+
continue; // Skip problematic folder
556561
}
557562
}
558563
}

0 commit comments

Comments
 (0)