aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2023-05-31 09:48:45 +0200
committerChristoph Wurst <christoph@winzerhof-wurst.at>2023-05-31 09:49:04 +0200
commitb7e7d80173f081bbe4d47e2b6f8dc7561cc27f6d (patch)
tree5b8e15f39eaf059458e132a79cce84bf0bf89dac /apps
parent6a3a0409194decb0b33ab79e03784d6cf84d363e (diff)
downloadnextcloud-server-b7e7d80173f081bbe4d47e2b6f8dc7561cc27f6d.tar.gz
nextcloud-server-b7e7d80173f081bbe4d47e2b6f8dc7561cc27f6d.zip
fix(caldav): Ignore invalid events for reminder generation
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'apps')
-rw-r--r--apps/dav/lib/CalDAV/Reminder/ReminderService.php4
-rw-r--r--apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php47
2 files changed, 51 insertions, 0 deletions
diff --git a/apps/dav/lib/CalDAV/Reminder/ReminderService.php b/apps/dav/lib/CalDAV/Reminder/ReminderService.php
index 984e29f1e4d..d4b22911099 100644
--- a/apps/dav/lib/CalDAV/Reminder/ReminderService.php
+++ b/apps/dav/lib/CalDAV/Reminder/ReminderService.php
@@ -793,6 +793,10 @@ class ReminderService {
if ($child->name !== 'VEVENT') {
continue;
}
+ // Ignore invalid events with no DTSTART
+ if ($child->DTSTART === null) {
+ continue;
+ }
$vevents[] = $child;
}
diff --git a/apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php b/apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php
index 710c6da0307..7af00e4463d 100644
--- a/apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php
+++ b/apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php
@@ -342,6 +342,53 @@ ICS;
$this->reminderService->onCalendarObjectCreate($objectData);
}
+ /**
+ * RFC5545 says DTSTART is REQUIRED, but we have seen event without the prop
+ */
+ public function testOnCalendarObjectCreateNoDtstart(): void {
+ $calendarData = <<<EOD
+BEGIN:VCALENDAR
+PRODID:-//Nextcloud calendar v1.6.4
+BEGIN:VEVENT
+CREATED:20160602T133732
+DTSTAMP:20160602T133732
+LAST-MODIFIED:20160602T133732
+UID:wej2z68l9h
+SUMMARY:Test Event
+BEGIN:VALARM
+ACTION:EMAIL
+TRIGGER:-PT15M
+END:VALARM
+BEGIN:VALARM
+ACTION:DISPLAY
+TRIGGER;VALUE=DATE-TIME:20160608T000000Z
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+EOD;
+ $objectData = [
+ 'calendardata' => $calendarData,
+ 'id' => '42',
+ 'calendarid' => '1337',
+ 'component' => 'vevent',
+ ];
+
+ $this->backend->expects($this->exactly(2))
+ ->method('insertReminder')
+ ->withConsecutive(
+ [1337, 42, 'wej2z68l9h', false, null, false, '5c70531aab15c92b52518ae10a2f78a4', 'de919af7429d3b5c11e8b9d289b411a6', 'EMAIL', true, 1465429500, false],
+ [1337, 42, 'wej2z68l9h', false, null, false, '5c70531aab15c92b52518ae10a2f78a4', '35b3eae8e792aa2209f0b4e1a302f105', 'DISPLAY', false, 1465344000, false]
+ )
+ ->willReturn(1);
+
+ $this->timeFactory->expects($this->once())
+ ->method('getDateTime')
+ ->with()
+ ->willReturn(DateTime::createFromFormat(DateTime::ATOM, '2016-06-08T00:00:00+00:00'));
+
+ $this->reminderService->onCalendarObjectCreate($objectData);
+ }
+
public function testOnCalendarObjectCreateSingleEntryWithRepeat(): void {
$objectData = [
'calendardata' => self::CALENDAR_DATA_REPEAT,