From a88dc0d87688e04b0c73b63da47ef94aa587b672 Mon Sep 17 00:00:00 2001 From: grnd-alt Date: Mon, 28 Sep 2026 11:14:00 +0200 Subject: [PATCH] fix: catch DoesNotExistException in DeckShareProvider Signed-off-by: grnd-alt --- lib/Service/PermissionService.php | 2 ++ lib/Sharing/DeckShareProvider.php | 21 ++++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/Service/PermissionService.php b/lib/Service/PermissionService.php index 4de5327367..bdb130a3ca 100644 --- a/lib/Service/PermissionService.php +++ b/lib/Service/PermissionService.php @@ -66,6 +66,7 @@ public function setAccessToken(string $token) { /** * Get current user permissions for a board by id * + * @throws DoesNotExistException * @return array */ public function getPermissions(int $boardId, ?string $userId = null, bool $allowDeleted = false): array { @@ -143,6 +144,7 @@ public function matchPermissions(Board $board) { * check permissions for replacing dark magic middleware * * @throws NoPermissionException + * @throws DoesNotExistException */ public function checkPermission(?IPermissionMapper $mapper, $id, int $permission, $userId = null, bool $allowDeletedCard = false, bool $allowDeletedBoard = false): bool { $boardId = (int)$id; diff --git a/lib/Sharing/DeckShareProvider.php b/lib/Sharing/DeckShareProvider.php index 84c121c0a1..c3bef4783d 100644 --- a/lib/Sharing/DeckShareProvider.php +++ b/lib/Sharing/DeckShareProvider.php @@ -270,6 +270,9 @@ private function createShareObject(array $data): IShare { return $share; } + /** + * @throws DoesNotExistException + */ private function applyBoardPermission($share, $permissions, $userId) { try { $this->permissionService->checkPermission($this->cardMapper, $share->getSharedWith(), Acl::PERMISSION_EDIT, $userId, true); @@ -622,7 +625,11 @@ public function getShareById($id, $recipientId = null) { $share = $this->createShareObject($data); if ($recipientId !== null) { - $share = $this->resolveSharesForRecipient([$share], $recipientId)[0]; + $resolvedShares = $this->resolveSharesForRecipient([$share], $recipientId); + if ($resolvedShares === []) { + throw new ShareNotFound(); + } + $share = $resolvedShares[0]; } return $share; @@ -675,8 +682,16 @@ private function resolveSharesForRecipient(array $shares, string $userId): array $stmt = $query->executeQuery(); while ($data = $stmt->fetch()) { - $this->applyBoardPermission($shareMap[$data['parent']], (int)$data['permissions'], $userId); - $shareMap[$data['parent']]->setTarget($data['file_target']); + if (!isset($shareMap[$data['parent']])) { + continue; + } + + try { + $this->applyBoardPermission($shareMap[$data['parent']], (int)$data['permissions'], $userId); + $shareMap[$data['parent']]->setTarget($data['file_target']); + } catch (DoesNotExistException $e) { + unset($shareMap[$data['parent']]); + } } $stmt->closeCursor();