aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Wurst <ChristophWurst@users.noreply.github.com>2024-09-16 20:11:43 +0200
committerGitHub <noreply@github.com>2024-09-16 20:11:43 +0200
commit97fd49af8ebdb4783f01b12ee6756f21f1bccb52 (patch)
treec7bc3f0b0476b7834b6d4e469140a5ce78860a92
parentc4eb1ac8fe2ceae5141b3b8748b6e7cd575d6284 (diff)
parentf83cebf79ea25beff7a758798f1bf6c1ef3ffdb1 (diff)
downloadnextcloud-server-97fd49af8ebdb4783f01b12ee6756f21f1bccb52.tar.gz
nextcloud-server-97fd49af8ebdb4783f01b12ee6756f21f1bccb52.zip
Merge pull request #48097 from nextcloud/backport/47924/stable30
[stable30] 🥅 — Catch MaxInstancesExceededException on calendar events
-rw-r--r--apps/dav/lib/CalDAV/CalDavBackend.php47
1 files changed, 31 insertions, 16 deletions
diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php
index 70895ac2c43..49631440a93 100644
--- a/apps/dav/lib/CalDAV/CalDavBackend.php
+++ b/apps/dav/lib/CalDAV/CalDavBackend.php
@@ -65,6 +65,7 @@ use Sabre\VObject\ParseException;
use Sabre\VObject\Property;
use Sabre\VObject\Reader;
use Sabre\VObject\Recur\EventIterator;
+use Sabre\VObject\Recur\MaxInstancesExceededException;
use Sabre\VObject\Recur\NoInstancesException;
use function array_column;
use function array_map;
@@ -1723,6 +1724,12 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
'exception' => $ex,
]);
continue;
+ } catch (MaxInstancesExceededException $ex) {
+ $this->logger->warning('Caught max instances exceeded exception for calendar data. This usually indicates too much recurring (more than 3500) event in calendar data. Object uri: '.$row['uri'], [
+ 'app' => 'dav',
+ 'exception' => $ex,
+ ]);
+ continue;
}
if (!$matches) {
@@ -2072,24 +2079,32 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
continue;
}
- $isValid = $this->validateFilterForObject($row, [
- 'name' => 'VCALENDAR',
- 'comp-filters' => [
- [
- 'name' => 'VEVENT',
- 'comp-filters' => [],
- 'prop-filters' => [],
- 'is-not-defined' => false,
- 'time-range' => [
- 'start' => $start,
- 'end' => $end,
+ try {
+ $isValid = $this->validateFilterForObject($row, [
+ 'name' => 'VCALENDAR',
+ 'comp-filters' => [
+ [
+ 'name' => 'VEVENT',
+ 'comp-filters' => [],
+ 'prop-filters' => [],
+ 'is-not-defined' => false,
+ 'time-range' => [
+ 'start' => $start,
+ 'end' => $end,
+ ],
],
],
- ],
- 'prop-filters' => [],
- 'is-not-defined' => false,
- 'time-range' => null,
- ]);
+ 'prop-filters' => [],
+ 'is-not-defined' => false,
+ 'time-range' => null,
+ ]);
+ } catch (MaxInstancesExceededException $ex) {
+ $this->logger->warning('Caught max instances exceeded exception for calendar data. This usually indicates too much recurring (more than 3500) event in calendar data. Object uri: '.$row['uri'], [
+ 'app' => 'dav',
+ 'exception' => $ex,
+ ]);
+ continue;
+ }
if (is_resource($row['calendardata'])) {
// Put the stream back to the beginning so it can be read another time