[Bug]: broken ics data leaves DAVx5 client with different results depending on who tries to sync
Nobody has claimed this yet.
- Dominant language
- PHP
- Stars
- 36.9k
- Forks
- 5.2k
- Avg merge
- 2d 3h
- Merged PRs (30d)
- 713
Description
⚠️ This issue respects the following points: ⚠️
- This is a bug, not a question or a configuration/webserver/proxy issue.
- This issue is not already reported on Github OR Nextcloud Community Forum (I've searched it).
- Nextcloud Server is up to date. See Maintenance and Release Schedule for supported versions.
- I agree to follow Nextcloud's Code of Conduct.
Bug description
The server install dates back to 2009 - it used to be a onwCloud install these days and was migrated to NextCloud somewhen in between.
The calendar of user1 seems to have some very old bogous events (e.g. from 2009).
The calendar of user1 is shared to user2 and user3 with read/write permissions.
All users sync the calendar to Android devices by using DAVx5 app.
If user1 starts a full sync all is ok (no error shown).
If user 2 and 3 sync last 90... x-hundred days: all ok.
If user 2 and 3 do a full sync they end up with a HTTP500 error in Davx5 and NextCloud Log shows the attached error log. No sync is executed.
Steps to reproduce
- Have such a bogous event in the calendar
- Sync as owner: all is ok
- Sync as user that the calendar is shared with: error is logged (on each and every sync cycle).
Expected behavior
- Sync should work the same way no matter who executes it. It either should fail or end gracefully any time.
- If bogous/misformatted events are found, there should be either some notification to the owner or the event should be repaired.
Nextcloud Server version
29
Operating system
Debian/Ubuntu
PHP engine version
PHP 8.3
Web server
Apache (supported)
Database engine version
MariaDB
Is this bug present after an update or on a fresh install?
None
Are you using the Nextcloud Server Encryption module?
None
What user-backends are you using?
- Default user-backend (database)
- LDAP/ Active Directory
- SSO - SAML
- Other
Configuration report
List of activated Apps
Enabled:
- activity: 2.21.1
- admin_audit: 1.19.0
- bookmarks: 14.2.7
- calendar: 4.7.16
- circles: 29.0.0-dev
- cloud_federation_api: 1.12.0
- comments: 1.19.0
- contacts: 6.0.3
- contactsinteraction: 1.10.0
- dashboard: 7.9.0
- dav: 1.30.1
- deck: 1.13.4
- federatedfilesharing: 1.19.0
- federation: 1.19.0
- files: 2.1.1
- files_pdfviewer: 2.10.0
- files_sharing: 1.21.0
- files_trashbin: 1.19.0
- logreader: 2.14.0
- lookup_server_connector: 1.17.0
- nextcloud_announcements: 1.18.0
- notes: 4.11.0
- notifications: 2.17.0
- oauth2: 1.17.1
- password_policy: 1.19.0
- photos: 2.5.0
- polls: 7.4.1
- privacy: 1.13.0
- provisioning_api: 1.19.0
- related_resources: 1.4.0
- richdocuments: 8.4.10
- richdocumentscode: 24.4.1204
- serverinfo: 1.19.0
- settings: 1.12.0
- sharebymail: 1.19.0
- support: 1.12.0
- systemtags: 1.19.0
- text: 3.10.1
- theming: 2.4.0
- twofactor_backupcodes: 1.18.0
- updatenotification: 1.19.1
- viewer: 2.3.0
- workflowengine: 2.11.0
Disabled:
- bruteforcesettings: 2.9.0
- encryption: 2.17.0
- files_downloadlimit: 2.0.0 (installed 2.0.0)
- files_external: 1.21.0
- files_reminders: 1.2.0 (installed 1.2.0)
- files_versions: 1.22.0 (installed 1.22.0)
- firstrunwizard: 2.18.0 (installed 2.18.0)
- mail: 3.6.1 (installed 3.6.1)
- recommendations: 2.1.0 (installed 2.1.0)
- survey_client: 1.17.0 (installed 1.17.0)
- suspicious_login: 7.0.0
- twofactor_totp: 11.0.0-dev
- user_ldap: 1.20.0
- user_status: 1.9.0 (installed 1.9.0)
- weather_status: 1.9.0 (installed 1.9.0)
Nextcloud Signing status
Nextcloud Logs
{"reqId":"Z9NBous5W2xKr8sIfzTukgAASzE","level":3,"time":"2025-03-13T20:35:46+00:00","remoteAddr":"84.170.129.187","user":"user2","app":"webdav","method":"REPORT","url":"/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/","message":"Unsupported VALUE parameter for DTEND property. You supplied \"\"","userAgent":"DAVx5/4.4.7-gplay (dav4jvm; okhttp/4.12.0) Android/14","version":"29.0.12.2","exception":{"Exception":"Sabre\\VObject\\InvalidDataException","Message":"Unsupported VALUE parameter for DTEND property. You supplied \"\"","Code":0,"Trace":[{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/vobject/lib/Parser/MimeDir.php","line":450,"function":"createProperty","class":"Sabre\\VObject\\Document","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/vobject/lib/Parser/MimeDir.php","line":227,"function":"readProperty","class":"Sabre\\VObject\\Parser\\MimeDir","type":"->","args":["DTEND;TZID=Europe/Berlin;VALUE=:20170310T193000"]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/vobject/lib/Parser/MimeDir.php","line":213,"function":"parseLine","class":"Sabre\\VObject\\Parser\\MimeDir","type":"->","args":["DTEND;TZID=Europe/Berlin;VALUE=:20170310T193000"]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/vobject/lib/Parser/MimeDir.php","line":178,"function":"parseLine","class":"Sabre\\VObject\\Parser\\MimeDir","type":"->","args":["DTEND;TZID=Europe/Berlin;VALUE=:20170310T193000"]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/vobject/lib/Parser/MimeDir.php","line":90,"function":"parseDocument","class":"Sabre\\VObject\\Parser\\MimeDir","type":"->","args":[]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/vobject/lib/Reader.php","line":47,"function":"parse","class":"Sabre\\VObject\\Parser\\MimeDir","type":"->","args":["BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud Calendar 0.8.1\nBEGIN:VEVENT\r\nUID:197bcf3963\r\nDTSTAMP:20161212T072134Z\r\nCREATED:20161212T072134Z\r\nLAST-MODIFIED:20161212T072134Z\r\nSUMMARY:KV Niedersedlitz\r\nDTSTART;TZID=Europe/Berlin:20170310T190000\r\nDTEND;TZID=Europe/Berlin;VALUE=:20170310T193000\r\nLOCATION:\r\nDESCRIPTION:\r\nCATEGORIES:\r\nEND:VEVENT\r\nEND:VCALENDAR",0]},{"file":"/www/htdocs/w019aa97/nextcloud/apps/dav/lib/CalDAV/CalendarObject.php","line":69,"function":"read","class":"Sabre\\VObject\\Reader","type":"::","args":["BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud Calendar 0.8.1\nBEGIN:VEVENT\r\nUID:197bcf3963\r\nDTSTAMP:20161212T072134Z\r\nCREATED:20161212T072134Z\r\nLAST-MODIFIED:20161212T072134Z\r\nSUMMARY:KV Niedersedlitz\r\nDTSTART;TZID=Europe/Berlin:20170310T190000\r\nDTEND;TZID=Europe/Berlin;VALUE=:20170310T193000\r\nLOCATION:\r\nDESCRIPTION:\r\nCATEGORIES:\r\nEND:VEVENT\r\nEND:VCALENDAR"]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/dav/lib/CalDAV/Plugin.php","line":406,"function":"get","class":"OCA\\DAV\\CalDAV\\CalendarObject","type":"->","args":[]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/dav/lib/DAV/PropFind.php","line":95,"function":"Sabre\\CalDAV\\{closure}","class":"Sabre\\CalDAV\\Plugin","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/dav/lib/CalDAV/Plugin.php","line":405,"function":"handle","class":"Sabre\\DAV\\PropFind","type":"->","args":["{urn:ietf:params:xml:ns:caldav}calendar-data",{"__class__":"Closure"}]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"propFind","class":"Sabre\\CalDAV\\Plugin","type":"->","args":[{"__class__":"Sabre\\DAV\\PropFind"},{"__class__":"OCA\\DAV\\CalDAV\\CalendarObject"}]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":1052,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["propFind",[{"__class__":"Sabre\\DAV\\PropFind"},{"__class__":"OCA\\DAV\\CalDAV\\CalendarObject"}]]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":1023,"function":"getPropertiesByNode","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Sabre\\DAV\\PropFind"},{"__class__":"OCA\\DAV\\CalDAV\\CalendarObject"}]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/dav/lib/CalDAV/Plugin.php","line":437,"function":"getPropertiesForMultiplePaths","class":"Sabre\\DAV\\Server","type":"->","args":[["calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c03c8189a01eb0d0834d0259178ca8a.ics","calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c1424797a1c8c9bd44ab1278d2fa7f6.ics","calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c1f72d19d52a3779f651c19e511f957.ics","calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c408515a9dc8174c6810875eee835db.ics","calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c769641e1ad0ad4aa48bd6c1809c3a1.ics","calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c9946af973614db484beebbefabceed.ics","calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0cd2bfd82c71de252c42c8f479425831.ics","calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0cf9a8a8288f49ea9145f0c68aecdbf1.ics","calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0cfb244d56ec71bc22ad743687c85eb9.ics","calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0d42a1d2f1e042122db767f84b143902.ics"],["{DAV:}getcontenttype","{DAV:}getetag","{urn:ietf:params:xml:ns:caldav}schedule-tag","{urn:ietf:params:xml:ns:caldav}calendar-data"]]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/dav/lib/CalDAV/Plugin.php","line":253,"function":"calendarMultiGetReport","class":"Sabre\\CalDAV\\Plugin","type":"->","args":[{"__class__":"Sabre\\CalDAV\\Xml\\Request\\CalendarMultiGetReport","properties":["{DAV:}getcontenttype","{DAV:}getetag","{urn:ietf:params:xml:ns:caldav}schedule-tag","{urn:ietf:params:xml:ns:caldav}calendar-data"],"hrefs":["/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c03c8189a01eb0d0834d0259178ca8a.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c1424797a1c8c9bd44ab1278d2fa7f6.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c1f72d19d52a3779f651c19e511f957.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c408515a9dc8174c6810875eee835db.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c769641e1ad0ad4aa48bd6c1809c3a1.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c9946af973614db484beebbefabceed.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0cd2bfd82c71de252c42c8f479425831.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0cf9a8a8288f49ea9145f0c68aecdbf1.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0cfb244d56ec71bc22ad743687c85eb9.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0d42a1d2f1e042122db767f84b143902.ics"],"expand":"*** sensitive parameters replaced ***","contentType":"text/calendar","version":"2.0"}]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"report","class":"Sabre\\CalDAV\\Plugin","type":"->","args":["{urn:ietf:params:xml:ns:caldav}calendar-multiget",{"__class__":"Sabre\\CalDAV\\Xml\\Request\\CalendarMultiGetReport","properties":["{DAV:}getcontenttype","{DAV:}getetag","{urn:ietf:params:xml:ns:caldav}schedule-tag","{urn:ietf:params:xml:ns:caldav}calendar-data"],"hrefs":["/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c03c8189a01eb0d0834d0259178ca8a.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c1424797a1c8c9bd44ab1278d2fa7f6.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c1f72d19d52a3779f651c19e511f957.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c408515a9dc8174c6810875eee835db.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c769641e1ad0ad4aa48bd6c1809c3a1.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c9946af973614db484beebbefabceed.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0cd2bfd82c71de252c42c8f479425831.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0cf9a8a8288f49ea9145f0c68aecdbf1.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0cfb244d56ec71bc22ad743687c85eb9.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0d42a1d2f1e042122db767f84b143902.ics"],"expand":"*** sensitive parameters replaced ***","contentType":"text/calendar","version":"2.0"},"calendars/user2/mobilesyncthomas_shared_by_user1"]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/dav/lib/DAV/CorePlugin.php","line":690,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["report",["{urn:ietf:params:xml:ns:caldav}calendar-multiget",{"__class__":"Sabre\\CalDAV\\Xml\\Request\\CalendarMultiGetReport","properties":["{DAV:}getcontenttype","{DAV:}getetag","{urn:ietf:params:xml:ns:caldav}schedule-tag","{urn:ietf:params:xml:ns:caldav}calendar-data"],"hrefs":["/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c03c8189a01eb0d0834d0259178ca8a.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c1424797a1c8c9bd44ab1278d2fa7f6.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c1f72d19d52a3779f651c19e511f957.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c408515a9dc8174c6810875eee835db.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c769641e1ad0ad4aa48bd6c1809c3a1.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0c9946af973614db484beebbefabceed.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0cd2bfd82c71de252c42c8f479425831.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0cf9a8a8288f49ea9145f0c68aecdbf1.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0cfb244d56ec71bc22ad743687c85eb9.ics","/remote.php/dav/calendars/user2/mobilesyncthomas_shared_by_user1/owncloud-0d42a1d2f1e042122db767f84b143902.ics"],"expand":"*** sensitive parameters replaced ***","contentType":"text/calendar","version":"2.0"},"calendars/user2/mobilesyncthomas_shared_by_user1"]]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpReport","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["method:REPORT",[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"/www/htdocs/w019aa97/nextcloud/apps/dav/lib/Connector/Sabre/Server.php","line":61,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php","line":321,"function":"start","class":"OCA\\DAV\\Connector\\Sabre\\Server","type":"->","args":[]},{"file":"/www/htdocs/w019aa97/nextcloud/apps/dav/lib/Server.php","line":393,"function":"exec","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"/www/htdocs/w019aa97/nextcloud/apps/dav/appinfo/v2/remote.php","line":35,"function":"exec","class":"OCA\\DAV\\Server","type":"->","args":[]},{"file":"/www/htdocs/w019aa97/nextcloud/remote.php","line":172,"args":["/www/htdocs/w019aa97/nextcloud/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/www/htdocs/w019aa97/nextcloud/3rdparty/sabre/vobject/lib/Document.php","Line":216,"message":"Unsupported VALUE parameter for DTEND property. You supplied \"\"","exception":[],"CustomMessage":"Unsupported VALUE parameter for DTEND property. You supplied \"\""},"id":"67d34cb0eb343"}
Additional info
ICS data sample of one of the errors shown above.
BEGIN:VCALENDAR
VERSION:2.0
PRODID:ownCloud Calendar 0.6.1
BEGIN:VEVENT
STATUS:TENTATIVE
TRANSP:OPAQUE
DTEND;VALUE=DATE-TIME:20090628T200000Z
DTSTART:20090628T130000Z
UID:1f6b1319-7f5d-4930-a107-4738ac28307f
SUMMARY:Sgs pieschen emmers
END:VEVENT
END:VCALENDAR
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the malformed DTEND example and trace parsing from 3rdparty/sabre/vobject/lib/Parser/MimeDir.php through apps/dav/lib/CalDAV/CalendarObject.php for shared-calendar DAV requests. Done means the malformed event no longer causes inconsistent owner and recipient sync behavior, with the relevant behavior covered by a regression test.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- php
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100