summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2023-05-31 09:48:45 +0200
committerArthur Schiwon <blizzz@arthur-schiwon.de>2023-07-10 18:24:05 +0200
commit1bbeffa4a59fc7edcfc44bd165c928401edb29b5 (patch)
treef0b43057bb96088a294a477a9cc3915a53be54fd
parent0a876e3ac8138dc8d4734a2491284798c300fdd6 (diff)
downloadnextcloud-server-1bbeffa4a59fc7edcfc44bd165c928401edb29b5.tar.gz
nextcloud-server-1bbeffa4a59fc7edcfc44bd165c928401edb29b5.zip
fix(caldav): Ignore invalid events for reminder generation
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
-rw-r--r--apps/dav/lib/CalDAV/Reminder/ReminderService.php4
-rw-r--r--apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php42
2 files changed, 46 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..5ff9dc36cf0 100644
--- a/apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php
+++ b/apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php
@@ -342,6 +342,48 @@ 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->never())
+ ->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->reminderService->onCalendarObjectCreate($objectData);
+ }
+
public function testOnCalendarObjectCreateSingleEntryWithRepeat(): void {
$objectData = [
'calendardata' => self::CALENDAR_DATA_REPEAT,