nextcloud / nextcloud/server

[Bug]: broken ics data leaves DAVx5 client with different results depending on who tries to sync

Open
#51,476 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

0. Needs triage 29-feedback bug feature: caldav
Dominant language
PHP
Stars
36.9k
Forks
5.2k
Avg merge
2d 3h
Merged PRs (30d)
713

Description

⚠️ This issue respects the following points: ⚠️
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
  1. Have such a bogous event in the calendar
  2. Sync as owner: all is ok
  3. Sync as user that the calendar is shared with: error is logged (on each and every sync cycle).
Expected behavior
  1. Sync should work the same way no matter who executes it. It either should fail or end gracefully any time.
  2. 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.