From 6f66fba559377d257be07c9a5f13db58bbc39b09 Mon Sep 17 00:00:00 2001
From: Georg Ehrke <developer@georgehrke.com>
Date: Sun, 18 Aug 2019 20:56:57 +0200
Subject: fix foreach error for reminder generator

Signed-off-by: Georg Ehrke <developer@georgehrke.com>
---
 apps/dav/lib/CalDAV/Reminder/ReminderService.php   |  8 ++++++
 .../unit/CalDAV/Reminder/ReminderServiceTest.php   | 32 ++++++++++++++++++++++
 2 files changed, 40 insertions(+)

(limited to 'apps')

diff --git a/apps/dav/lib/CalDAV/Reminder/ReminderService.php b/apps/dav/lib/CalDAV/Reminder/ReminderService.php
index f36ddd157cc..dd19c400720 100644
--- a/apps/dav/lib/CalDAV/Reminder/ReminderService.php
+++ b/apps/dav/lib/CalDAV/Reminder/ReminderService.php
@@ -196,6 +196,10 @@ class ReminderService {
 		foreach($recurrenceExceptions as $recurrenceException) {
 			$eventHash = $this->getEventHash($recurrenceException);
 
+			if (!isset($recurrenceException->VALARM)) {
+				continue;
+			}
+
 			foreach($recurrenceException->VALARM as $valarm) {
 				/** @var VAlarm $valarm */
 				$alarmHash = $this->getAlarmHash($valarm);
@@ -216,6 +220,10 @@ class ReminderService {
 			$masterAlarms = [];
 			$masterHash = $this->getEventHash($masterItem);
 
+			if (!isset($masterItem->VALARM)) {
+				return;
+			}
+
 			foreach($masterItem->VALARM as $valarm) {
 				$masterAlarms[] = $this->getAlarmHash($valarm);
 			}
diff --git a/apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php b/apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php
index a9acca66a81..4dcb688caa1 100644
--- a/apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php
+++ b/apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php
@@ -164,6 +164,23 @@ TRIGGER:-P8D
 END:VALARM
 END:VEVENT
 END:VCALENDAR
+EOD;
+
+	public const CALENDAR_DATA_NO_ALARM = <<<EOD
+BEGIN:VCALENDAR
+PRODID:-//Nextcloud calendar v1.6.4
+BEGIN:VEVENT
+CREATED:20160602T133732
+DTSTAMP:20160602T133732
+LAST-MODIFIED:20160602T133732
+UID:wej2z68l9h
+SUMMARY:Test Event
+LOCATION:Somewhere ...
+DESCRIPTION:maybe ....
+DTSTART;TZID=Europe/Berlin;VALUE=DATE:20160609
+DTEND;TZID=Europe/Berlin;VALUE=DATE:20160610
+END:VEVENT
+END:VCALENDAR
 EOD;
 
     public function setUp() {
@@ -278,6 +295,21 @@ EOD;
 		$this->reminderService->onTouchCalendarObject($action, $objectData);
 	}
 
+	public function testOnCalendarObjectCreateEmpty():void {
+		$action = '\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject';
+		$objectData = [
+			'calendardata' => self::CALENDAR_DATA_NO_ALARM,
+			'id' => '42',
+			'calendarid' => '1337',
+			'component' => 'vevent',
+		];
+
+		$this->backend->expects($this->never())
+			->method('insertReminder');
+
+		$this->reminderService->onTouchCalendarObject($action, $objectData);
+	}
+
 	public function testOnCalendarObjectCreateRecurringEntryWithRepeat():void {
 		$action = '\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject';
 		$objectData = [
-- 
cgit v1.2.3