bitfireAT/ical4android

Couldn't parse iCalendar / Unparseable date: ":20220331T084614Z"

paulHempel opened this issue · 2 comments

Caused by: java.text.ParseException: Unparseable date: ":20220331T084614Z"

  • All my events are unable to be parsed.
  • My calendar provider is posteo.de
  • Happend in ICSx5 app
  • Side note: My calendar URL does not end on .ics (unlike the example URL). Dunno if this could be a problem.

Event example:

BEGIN:VEVENT
EXDATE;VALUE=DATE:20220101
EXDATE;VALUE=DATE:20211001
CREATED;VALUE=DATE-TIME:20211003T130823Z
DTEND;VALUE=DATE:20211011
DTSTART;VALUE=DATE:20211001
TRANSP:TRANSPARENT
DTSTAMP;VALUE=DATE-TIME:20220331T084614Z
LAST-MODIFIED;VALUE=DATE-TIME:20220104T115808Z
UID:3979A421-7245-4F51-9E72-F8DF0A1BD2BE
URL;VALUE=URI:
SUMMARY:<redacted>
RRULE:FREQ=MONTHLY;INTERVAL=3;BYMONTHDAY=1
SEQUENCE:0
X-APPLE-TRAVEL-ADVISORY-BEHAVIOR::AUTOMATIC
BEGIN:VALARM
TRIGGER:-PT15H
ATTACH;ENCODING=BASE64;FILENAME=attachment-not-shared.txt;VALUE=BINARY:<redacted>
ACTION:AUDIO
X-WR-ALARMUID::D8F053D3-C614-4FDB-A217-EE607C5750EC
UID::D8F053D3-C614-4FDB-A217-EE607C5750EC
X-APPLE-DEFAULT-ALARM::TRUE
ACKNOWLEDGED::20220331T084614Z
END:VALARM
END:VEVENT

Full stack trace:

at.bitfire.ical4android.InvalidCalendarException: Couldn't parse iCalendar
 at at.bitfire.ical4android.ICalendar$Companion.fromReader(ICalendar.kt:81)
 at at.bitfire.ical4android.Event$Companion.eventsFromReader(Event.kt:81)
 at at.bitfire.icsdroid.ui.AddCalendarValidationFragment$ValidationModel$initialize$downloader$1.onSuccess(AddCalendarValidationFragment.kt:115)
 at at.bitfire.icsdroid.CalendarFetcher.fetchLocal$icsx5_62_2_0_2_standardRelease(CalendarFetcher.kt:114)
 at at.bitfire.icsdroid.CalendarFetcher.run(CalendarFetcher.kt:48)
 at java.lang.Thread.run(Thread.java:919)
Caused by: net.fortuna.ical4j.data.ParserException: Error at line 63:Unparseable date: ":20220331T084614Z"
 at net.fortuna.ical4j.data.CalendarParserImpl.parse(CalendarParserImpl.java:172)
 at net.fortuna.ical4j.data.CalendarBuilder.build(CalendarBuilder.java:197)
 at net.fortuna.ical4j.data.CalendarBuilder.build(CalendarBuilder.java:185)
 at at.bitfire.ical4android.ICalendar$Companion.fromReader(ICalendar.kt:79)
 ... 5 more
Caused by: java.text.ParseException: Unparseable date: ":20220331T084614Z"
 at java.text.DateFormat.parse(DateFormat.java:362)
 at net.fortuna.ical4j.model.DateTime.setTime(DateTime.java:418)
 at net.fortuna.ical4j.model.DateTime.<init>(DateTime.java:349)
 at net.fortuna.ical4j.model.property.DateProperty.setValue(DateProperty.java:139)
 at net.fortuna.ical4j.model.property.Acknowledged.<init>(Acknowledged.java:124)
 at net.fortuna.ical4j.model.property.Acknowledged$Factory.createProperty(Acknowledged.java:158)
 at net.fortuna.ical4j.model.PropertyBuilder.build(PropertyBuilder.java:76)
 at net.fortuna.ical4j.data.DefaultContentHandler.endProperty(DefaultContentHandler.java:159)
 at net.fortuna.ical4j.data.CalendarParserImpl$PropertyParser.parse(CalendarParserImpl.java:309)
 at net.fortuna.ical4j.data.CalendarParserImpl$PropertyParser.access$1100(CalendarParserImpl.java:241)
 at net.fortuna.ical4j.data.CalendarParserImpl$PropertyListParser.parse(CalendarParserImpl.java:226)
 at net.fortuna.ical4j.data.CalendarParserImpl$ComponentParser.parse(CalendarParserImpl.java:446)
 at net.fortuna.ical4j.data.CalendarParserImpl$ComponentParser.access$900(CalendarParserImpl.java:422)
 at net.fortuna.ical4j.data.CalendarParserImpl$PropertyListParser.parse(CalendarParserImpl.java:224)
 at net.fortuna.ical4j.data.CalendarParserImpl$ComponentParser.parse(CalendarParserImpl.java:446)
 at net.fortuna.ical4j.data.CalendarParserImpl$ComponentParser.access$900(CalendarParserImpl.java:422)
 at net.fortuna.ical4j.data.CalendarParserImpl$PropertyListParser.parse(CalendarParserImpl.java:224)
 at net.fortuna.ical4j.data.CalendarParserImpl.parseCalendar(CalendarParserImpl.java:128)
 at net.fortuna.ical4j.data.CalendarParserImpl.parseCalendarList(CalendarParserImpl.java:194)
 at net.fortuna.ical4j.data.CalendarParserImpl.parse(CalendarParserImpl.java:163)
 ... 8 more

Any help appreciated :)

The string 20220331T084614Z appears on two places:

DTSTAMP;VALUE=DATE-TIME:20220331T084614Z
ACKNOWLEDGED::20220331T084614Z

The value-type of DTSTAMP is always DATE-TIME, so there is no need for ;VALUE=DATE-TIME there.

In ACKNOWLEDGED: the value begins right after the first colon, so the value is indeed :20220331T084614Z with the colon. This value is invalid.

I see two problems here: some software (calendar user agent) generated wrong ACKNOWLEDGED-property; and the server has not validated the correctness of the input.

Thanks for the quick analysis!
I'll forward this information as feedback to my provider.