diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index 3b022f5951c13..61dbbbb378efc 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -43,6 +43,7 @@ use OC\Files\Mount\MoveableMount; use OC\HintException; use OC\Share20\Exception\ProviderException; +use OCA\Files_Sharing\ISharedStorage; use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\File; use OCP\Files\Folder; @@ -299,8 +300,15 @@ protected function generalCreateChecks(IShare $share) { $isFederatedShare = $share->getNode()->getStorage()->instanceOfStorage('\OCA\Files_Sharing\External\Storage'); $permissions = 0; - $userMounts = $userFolder->getById($share->getNode()->getId()); + $userMounts = array_filter($userFolder->getById($share->getNode()->getId()), function($mount) { + // We need to filter since there might be other mountpoints that contain the file + // e.g. if the user has access to the same external storage that the file is originating from + return $mount->getStorage()->instanceOfStorage(ISharedStorage::class); + }); $userMount = array_shift($userMounts); + if ($userMount === null) { + throw new GenericShareException('Could not get proper share mount for ' . $share->getNode()->getId() . '. Failing since else the next calls are called with null'); + } $mount = $userMount->getMountPoint(); if (!$isFederatedShare && $share->getNode()->getOwner() && $share->getNode()->getOwner()->getUID() !== $share->getSharedBy()) { // When it's a reshare use the parent share permissions as maximum