Skip to content

Expand CalDAVRemoveEmptyValue.php to fix additional 'Unsupported VALUE parameter for DTEND property' errors that cause sync issues #17554

@maertsen

Description

@maertsen

I just squashed a long existing type of error message in my logs, of the form 'Unsupported VALUE parameter for DTEND property'. I tracked this down to incorrect VCARD data created while running Owncloud Calendar 0.8.1.

The following patch to apps/dav/lib/Migration/CalDAVRemoveEmptyValue.php combined with a call to occ maintenance:repair fixes the incorrect VCARD data. This fixed all kinds of sync issues with shared calendars on my installation. Please consider integrating similar logic for other users benefit.

61c61
<               $pattern = 'DTEND;VALUE=;';
---
>               $pattern = ';VALUE=:';
69c69
<                       $data = preg_replace('/' . $pattern . '/', 'DTEND;', $calObject['calendardata']);
---
>                       $data = preg_replace('/' . $pattern . '/', ':', $calObject['calendardata']);

This is an example of the invalid VCARD data (newlines added for legibility):

BEGIN:VCALENDAR\n
VERSION:2.0\n
PRODID:ownCloud Calendar 0.8.1\n
BEGIN:VEVENT\r\n
DTSTAMP:20160212T233814Z\r\n
UID:123@example.org\r\n
SUMMARY:FooEvent\r\n
ORGANIZER:mailto:user@example.org\r\n
STATUS:CONFIRMED\r\n
DTSTART;TZID=Europe/Paris:20151212T140000\r\n
DTEND;VALUE=;TZID=Europe/Paris:20151212T200000\r\n
END:VEVENT\r\n
END:VCALENDAR

example stack trace:

[webdav] Fatal: Sabre\VObject\InvalidDataException: Unsupported VALUE parameter for DTEND property. You supplied "" at <<closure>>

 0. /path/to/nextcloud/3rdparty/sabre/vobject/lib/Parser/MimeDir.php line 454
    Sabre\VObject\Document->createProperty("DTEND", null, {VALUE: "",TZID: "<TIMEZONE>"})
 1. /path/to/nextcloud/3rdparty/sabre/vobject/lib/Parser/MimeDir.php line 234
    Sabre\VObject\Parser\MimeDir->readProperty("DTEND;VALUE=;TZ ... 0")
 2. /path/to/nextcloud/3rdparty/sabre/vobject/lib/Parser/MimeDir.php line 217
    Sabre\VObject\Parser\MimeDir->parseLine("DTEND;VALUE=;TZ ... 0")
 3. /path/to/nextcloud/3rdparty/sabre/vobject/lib/Parser/MimeDir.php line 181
    Sabre\VObject\Parser\MimeDir->parseLine("DTEND;VALUE=;TZ ... 0")
 4. /path/to/nextcloud/3rdparty/sabre/vobject/lib/Parser/MimeDir.php line 89
    Sabre\VObject\Parser\MimeDir->parseDocument()
 5. /path/to/nextcloud/3rdparty/sabre/vobject/lib/Reader.php line 46
    Sabre\VObject\Parser\MimeDir->parse("BEGIN:VCALENDAR ... R", 0)
 6. /path/to/nextcloud/apps/dav/lib/CalDAV/CalendarObject.php line 61
    Sabre\VObject\Reader::read("BEGIN:VCALENDAR ... R")
 7. /path/to/nextcloud/3rdparty/sabre/dav/lib/CalDAV/Plugin.php line 413
    OCA\DAV\CalDAV\CalendarObject->get()
 8. /path/to/nextcloud/3rdparty/sabre/dav/lib/DAV/PropFind.php line 98
    Sabre\CalDAV\Plugin->Sabre\CalDAV\{closure}("*** sensitive parameters replaced ***")
 9. /path/to/nextcloud/3rdparty/sabre/dav/lib/CalDAV/Plugin.php line 420
    Sabre\DAV\PropFind->handle("{urn:ietf:param ... a", Closure {})
10. <<closure>>
    Sabre\CalDAV\Plugin->propFind(Sabre\DAV\PropFind {}, OCA\DAV\CalDAV\CalendarObject {})
11. /path/to/nextcloud/3rdparty/sabre/event/lib/EventEmitterTrait.php line 105
    undefinedundefinedcall_user_func_array([OCA\DAV\CalDAV\Plugin {},"propFind"], [Sabre\DAV\PropF ... }])
12. /path/to/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php line 1059
    Sabre\Event\EventEmitter->emit("propFind", [Sabre\DAV\PropF ... }])
13. /path/to/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php line 1025
    Sabre\DAV\Server->getPropertiesByNode(Sabre\DAV\PropFind {}, OCA\DAV\CalDAV\CalendarObject {})
14. /path/to/nextcloud/3rdparty/sabre/dav/lib/CalDAV/Plugin.php line 447
    Sabre\DAV\Server->getPropertiesForMultiplePaths(["calendars/<USER> ... "], ["{DAV:}getetag" ... "])
15. /path/to/nextcloud/3rdparty/sabre/dav/lib/CalDAV/Plugin.php line 246
    Sabre\CalDAV\Plugin->calendarMultiGetReport(Sabre\CalDAV\Xml ... "})
16. <<closure>>
    Sabre\CalDAV\Plugin->report("{urn:ietf:param ... t", Sabre\CalDAV\Xml ... "}, "calendars/<USER> ... n")
17. /path/to/nextcloud/3rdparty/sabre/event/lib/EventEmitterTrait.php line 105
    undefinedundefinedcall_user_func_array([OCA\DAV\CalDAV\Plugin {},"report"], ["{urn:ietf:para ... "])
18. /path/to/nextcloud/3rdparty/sabre/dav/lib/DAV/CorePlugin.php line 718
    Sabre\Event\EventEmitter->emit("report", ["{urn:ietf:para ... "])
19. <<closure>>
    Sabre\DAV\CorePlugin->httpReport(Sabre\HTTP\Reque ... "}, Sabre\HTTP\Response {})
20. /path/to/nextcloud/3rdparty/sabre/event/lib/EventEmitterTrait.php line 105
    undefinedundefinedcall_user_func_array([Sabre\DAV\CorePlugin {},"httpReport"], [Sabre\HTTP\Requ ... }])
21. /path/to/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php line 479
    Sabre\Event\EventEmitter->emit("method:REPORT", [Sabre\HTTP\Requ ... }])
22. /path/to/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php line 254
    Sabre\DAV\Server->invokeMethod(Sabre\HTTP\Reque ... "}, Sabre\HTTP\Response {})
23. /path/to/nextcloud/apps/dav/lib/Server.php line 316
    Sabre\DAV\Server->exec()
24. /path/to/nextcloud/apps/dav/appinfo/v2/remote.php line 35
    OCA\DAV\Server->exec()
25. /path/to/nextcloud/remote.php line 163
    undefinedundefinedrequire_once("/path/to/nextcl ... p")

REPORT /nextcloud/remote.php/dav/calendars/<USER>/<CALENDAR>/
from <IP> by <USER> at <TIMESTAMP>

Metadata

Metadata

Assignees

No one assigned

    Labels

    1. to developAccepted and waiting to be taken care ofenhancementfeature: caldavRelated to CalDAV internalsfeature: davgood first issueSmall tasks with clear documentation about how and in which place you need to fix things in.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions