diff options
author | Christoph Wurst <christoph@winzerhof-wurst.at> | 2023-05-31 09:48:45 +0200 |
---|---|---|
committer | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2023-07-10 18:24:05 +0200 |
commit | 1bbeffa4a59fc7edcfc44bd165c928401edb29b5 (patch) | |
tree | f0b43057bb96088a294a477a9cc3915a53be54fd | |
parent | 0a876e3ac8138dc8d4734a2491284798c300fdd6 (diff) | |
download | nextcloud-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.php | 4 | ||||
-rw-r--r-- | apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php | 42 |
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, |