mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
fix(dav): don't crash subscription on invalid calendar object
Signed-off-by: escoand <escoand@users.noreply.github.com>
This commit is contained in:
parent
b3ca5b5171
commit
a5eb38f277
2 changed files with 11 additions and 4 deletions
|
|
@ -12,6 +12,7 @@ use OCA\DAV\CalDAV\CalDavBackend;
|
|||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Sabre\DAV\Exception\BadRequest;
|
||||
use Sabre\DAV\Exception\Forbidden;
|
||||
use Sabre\DAV\PropPatch;
|
||||
use Sabre\VObject\Component;
|
||||
use Sabre\VObject\DateTimeParser;
|
||||
|
|
@ -101,7 +102,13 @@ class RefreshWebcalService {
|
|||
continue;
|
||||
}
|
||||
|
||||
$denormalized = $this->calDavBackend->getDenormalizedData($vObject->serialize());
|
||||
try {
|
||||
$denormalized = $this->calDavBackend->getDenormalizedData($vObject->serialize());
|
||||
} catch (InvalidDataException|Forbidden $ex) {
|
||||
$this->logger->warning('Unable to denormalize calendar object from subscription {subscriptionId}', ['exception' => $ex, 'subscriptionId' => $subscription['id'], 'source' => $subscription['source']]);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Find all identical sets and remove them from the update
|
||||
if (isset($localData[$uid]) && $denormalized['etag'] === $localData[$uid]['etag']) {
|
||||
unset($localData[$uid]);
|
||||
|
|
@ -127,7 +134,7 @@ class RefreshWebcalService {
|
|||
$objectUri = $this->getRandomCalendarObjectUri();
|
||||
$this->calDavBackend->createCalendarObject($subscription['id'], $objectUri, $vObject->serialize(), CalDavBackend::CALENDAR_TYPE_SUBSCRIPTION);
|
||||
} catch (NoInstancesException|BadRequest $ex) {
|
||||
$this->logger->error('Unable to create calendar object from subscription {subscriptionId}', ['exception' => $ex, 'subscriptionId' => $subscription['id'], 'source' => $subscription['source']]);
|
||||
$this->logger->warning('Unable to create calendar object from subscription {subscriptionId}', ['exception' => $ex, 'subscriptionId' => $subscription['id'], 'source' => $subscription['source']]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -252,7 +252,7 @@ class RefreshWebcalServiceTest extends TestCase {
|
|||
->willThrowException($noInstanceException);
|
||||
|
||||
$this->logger->expects(self::once())
|
||||
->method('error')
|
||||
->method('warning')
|
||||
->with('Unable to create calendar object from subscription {subscriptionId}', ['exception' => $noInstanceException, 'subscriptionId' => '42', 'source' => 'webcal://foo.bar/bla2']);
|
||||
|
||||
$refreshWebcalService->refreshSubscription('principals/users/testuser', 'sub123');
|
||||
|
|
@ -302,7 +302,7 @@ class RefreshWebcalServiceTest extends TestCase {
|
|||
->willThrowException($badRequestException);
|
||||
|
||||
$this->logger->expects(self::once())
|
||||
->method('error')
|
||||
->method('warning')
|
||||
->with('Unable to create calendar object from subscription {subscriptionId}', ['exception' => $badRequestException, 'subscriptionId' => '42', 'source' => 'webcal://foo.bar/bla2']);
|
||||
|
||||
$refreshWebcalService->refreshSubscription('principals/users/testuser', 'sub123');
|
||||
|
|
|
|||
Loading…
Reference in a new issue