diff options
author | Christoph Wurst <ChristophWurst@users.noreply.github.com> | 2024-09-16 20:11:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-16 20:11:43 +0200 |
commit | 97fd49af8ebdb4783f01b12ee6756f21f1bccb52 (patch) | |
tree | c7bc3f0b0476b7834b6d4e469140a5ce78860a92 | |
parent | c4eb1ac8fe2ceae5141b3b8748b6e7cd575d6284 (diff) | |
parent | f83cebf79ea25beff7a758798f1bf6c1ef3ffdb1 (diff) | |
download | nextcloud-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.php | 47 |
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 |