bitfireAT/ical4android

Stackoverflow on Standard in Vtimezone

Closed this issue · 5 comments

Update by @rfc2822: already reported – depends on ical4j/ical4j#637


Below ics will result in a stack overflow error:

BEGIN:VCALENDAR
PRODID:-//K Desktop Environment//NONSGML libkcal 4.3//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Berlin
BEGIN:STANDARD
DTSTART;TZID=Europe/Berlin:19800928T030000
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
java.lang.StackOverflowError: stack size 1038KB
at net.fortuna.ical4j.model.Iso8601.toString(Iso8601.java:117)
at net.fortuna.ical4j.model.DateTime.toString(DateTime.java:503)
at net.fortuna.ical4j.model.component.Observance.calculateOnset(Observance.java:286)
at net.fortuna.ical4j.model.component.Observance.getLatestOnset(Observance.java:146)
at net.fortuna.ical4j.model.component.VTimeZone.getApplicableObservance(VTimeZone.java:200)
at net.fortuna.ical4j.model.TimeZone.getOffset(TimeZone.java:122)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2285)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2254)
at java.util.Calendar.setTimeInMillis(Calendar.java:1122)
at java.util.GregorianCalendar.<init>(GregorianCalendar.java:622)
at java.util.Calendar.createCalendar(Calendar.java:1025)
at java.util.Calendar.getInstance(Calendar.java:989)
at net.fortuna.ical4j.model.CalendarDateFormatFactory$DateFormat.format(CalendarDateFormatFactory.java:298)
at java.text.DateFormat.format(DateFormat.java:337)
at net.fortuna.ical4j.model.Iso8601.toString(Iso8601.java:134)
at net.fortuna.ical4j.model.DateTime.toString(DateTime.java:503)
at net.fortuna.ical4j.model.component.Observance.calculateOnset(Observance.java:286)
at net.fortuna.ical4j.model.component.Observance.getLatestOnset(Observance.java:146)
at net.fortuna.ical4j.model.component.VTimeZone.getApplicableObservance(VTimeZone.java:200)
at net.fortuna.ical4j.model.TimeZone.getOffset(TimeZone.java:122)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2285)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2254)
at java.util.Calendar.setTimeInMillis(Calendar.java:1122)
at java.util.GregorianCalendar.<init>(GregorianCalendar.java:622)
at java.util.Calendar.createCalendar(Calendar.java:1025)
at java.util.Calendar.getInstance(Calendar.java:989)
at net.fortuna.ical4j.model.CalendarDateFormatFactory$DateFormat.format(CalendarDateFormatFactory.java:298)
at java.text.DateFormat.format(DateFormat.java:337)
at net.fortuna.ical4j.model.Iso8601.toString(Iso8601.java:134)
at net.fortuna.ical4j.model.DateTime.toString(DateTime.java:503)
at net.fortuna.ical4j.model.component.Observance.calculateOnset(Observance.java:286)
at net.fortuna.ical4j.model.component.Observance.getLatestOnset(Observance.java:146)
at net.fortuna.ical4j.model.component.VTimeZone.getApplicableObservance(VTimeZone.java:200)
at net.fortuna.ical4j.model.TimeZone.getOffset(TimeZone.java:122)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2285)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2254)
at java.util.Calendar.setTimeInMillis(Calendar.java:1122)
at java.util.GregorianCalendar.<init>(GregorianCalendar.java:622)
at java.util.Calendar.createCalendar(Calendar.java:1025)
at java.util.Calendar.getInstance(Calendar.java:989)
at net.fortuna.ical4j.model.CalendarDateFormatFactory$DateFormat.format(CalendarDateFormatFactory.java:298)
at java.text.DateFormat.format(DateFormat.java:337)
at net.fortuna.ical4j.model.Iso8601.toString(Iso8601.java:134)
at net.fortuna.ical4j.model.DateTime.toString(DateTime.java:503)
at net.fortuna.ical4j.model.component.Observance.calculateOnset(Observance.java:286)
at net.fortuna.ical4j.model.component.Observance.getLatestOnset(Observance.java:146)
at net.fortuna.ical4j.model.component.VTimeZone.getApplicableObservance(VTimeZone.java:200)
at net.fortuna.ical4j.model.TimeZone.getOffset(TimeZone.java:122)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2285)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2254)
at java.util.Calendar.setTimeInMillis(Calendar.java:1122)
at java.util.GregorianCalendar.<init>(GregorianCalendar.java:622)
at java.util.Calendar.createCalendar(Calendar.java:1025)
at java.util.Calendar.getInstance(Calendar.java:989)
at net.fortuna.ical4j.model.CalendarDateFormatFactory$DateFormat.format(CalendarDateFormatFactory.java:298)
at java.text.DateFormat.format(DateFormat.java:337)
at net.fortuna.ical4j.model.Iso8601.toString(Iso8601.java:134)
at net.fortuna.ical4j.model.DateTime.toString(DateTime.java:503)
at net.fortuna.ical4j.model.component.Observance.calculateOnset(Observance.java:286)
at net.fortuna.ical4j.model.component.Observance.getLatestOnset(Observance.java:146)
at net.fortuna.ical4j.model.component.VTimeZone.getApplicableObservance(VTimeZone.java:200)
at net.fortuna.ical4j.model.TimeZone.getOffset(TimeZone.java:122)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2285)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2254)
at java.util.Calendar.setTimeInMillis(Calendar.java:1122)
at java.util.GregorianCalendar.<init>(GregorianCalendar.java:622)
at java.util.Calendar.createCalendar(Calendar.java:1025)
at java.util.Calendar.getInstance(Calendar.java:989)
at net.fortuna.ical4j.model.CalendarDateFormatFactory$DateFormat.format(CalendarDateFormatFactory.java:298)
at java.text.DateFormat.format(DateFormat.java:337)
at net.fortuna.ical4j.model.Iso8601.toString(Iso8601.java:134)
at net.fortuna.ical4j.model.DateTime.toString(DateTime.java:503)
at net.fortuna.ical4j.model.component.Observance.calculateOnset(Observance.java:286)
at net.fortuna.ical4j.model.component.Observance.getLatestOnset(Observance.java:146)
at net.fortuna.ical4j.model.component.VTimeZone.getApplicableObservance(VTimeZone.java:200)
at net.fortuna.ical4j.model.TimeZone.getOffset(TimeZone.java:122)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2285)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2254)
at java.util.Calendar.setTimeInMillis(Calendar.java:1122)
at java.util.GregorianCalendar.<init>(GregorianCalendar.java:622)
at java.util.Calendar.createCalendar(Calendar.java:1025)
at java.util.Calendar.getInstance(Calendar.java:989)
at net.fortuna.ical4j.model.CalendarDateFormatFactory$DateFormat.format(CalendarDateFormatFactory.java:298)
at java.text.DateFormat.format(DateFormat.java:337)
at net.fortuna.ical4j.model.Iso8601.toString(Iso8601.java:134)
at net.fortuna.ical4j.model.DateTime.toString(DateTime.java:503)
at net.fortuna.ical4j.model.component.Observance.calculateOnset(Observance.java:286)
at net.fortuna.ical4j.model.component.Observance.getLatestOnset(Observance.java:146)
at net.fortuna.ical4j.model.component.VTimeZone.getApplicableObservance(VTimeZone.java:200)
at net.fortuna.ical4j.model.TimeZone.getOffset(TimeZone.java:122)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2285)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2254)
at java.util.Calendar.setTimeInMillis(Calendar.java:1122)
at java.util.GregorianCalendar.<init>(GregorianCalendar.java:622)
at java.util.Calendar.createCalendar(Calendar.java:1025)
at java.util.Calendar.getInstance(Calendar.java:989)
at net.fortuna.ical4j.model.CalendarDateFormatFactory$DateFormat.format(CalendarDateFormatFactory.java:298)
at java.text.DateFormat.format(DateFormat.java:337)
at net.fortuna.ical4j.model.Iso8601.toString(Iso8601.java:134)
at net.fortuna.ical4j.model.DateTime.toString(DateTime.java:503)
at net.fortuna.ical4j.model.component.Observance.calculateOnset(Observance.java:286)
at net.fortuna.ical4j.model.component.Observance.getLatestOnset(Observance.java:146)
at net.fortuna.ical4j.model.component.VTimeZone.getApplicableObservance(VTimeZone.java:200)
at net.fortuna.ical4j.model.TimeZone.getOffset(TimeZone.java:122)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2285)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2254)
at java.util.Calendar.setTimeInMillis(Calendar.java:1122)
at java.util.GregorianCalendar.<init>(GregorianCalendar.java:622)
at java.util.Calendar.createCalendar(Calendar.java:1025)
at java.util.Calendar.getInstance(Calendar.java:989)
at net.fortuna.ical4j.model.CalendarDateFormatFactory$DateFormat.format(CalendarDateFormatFactory.java:298)
at java.text.DateFormat.format(DateFormat.java:337)
at net.fortuna.ical4j.model.Iso8601.toString(Iso8601.java:134)
at net.fortuna.ical4j.model.DateTime.toString(DateTime.java:503)
at net.fortuna.ical4j.model.component.Observance.calculateOnset(Observance.java:286)
at net.fortuna.ical4j.model.component.Observance.getLatestOnset(Observance.java:146)
at net.fortuna.ical4j.model.component.VTimeZone.getApplicableObservance(VTimeZone.java:200)
at net.fortuna.ical4j.model.TimeZone.getOffset(TimeZone.java:122)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2285)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2254)
at java.util.Calendar.setTimeInMillis(Calendar.java:1122)
at java.util.GregorianCalendar.<init>(GregorianCalendar.java:622)
at java.util.Calendar.createCalendar(Calendar.java:1025)
at java.util.Calendar.getInstance(Calendar.java:989)
at net.fortuna.ical4j.model.CalendarDateFormatFactory$DateFormat.format(CalendarDateFormatFactory.java:298)
at java.text.DateFormat.format(DateFormat.java:337)
at net.fortuna.ical4j.model.Iso8601.toString(Iso8601.java:134)
at net.fortuna.ical4j.model.DateTime.toString(DateTime.java:503)
at net.fortuna.ical4j.model.component.Observance.calculateOnset(Observance.java:286)
at net.fortuna.ical4j.model.component.Observance.getLatestOnset(Observance.java:146)
at net.fortuna.ical4j.model.component.VTimeZone.getApplicableObservance(VTimeZone.java:200)
at net.fortuna.ical4j.model.TimeZone.getOffset(TimeZone.java:122)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2285)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2254)
at java.util.Calendar.setTimeInMillis(Calendar.java:1122)
at java.util.GregorianCalendar.<init>(GregorianCalendar.java:622)
at java.util.Calendar.createCalendar(Calendar.java:1025)
at java.util.Calendar.getInstance(Calendar.java:989)
at net.fortuna.ical4j.model.CalendarDateFormatFactory$DateFormat.format(CalendarDateFormatFactory.java:298)
at java.text.DateFormat.format(DateFormat.java:337)
at net.fortuna.ical4j.model.Iso8601.toString(Iso8601.java:134)
at net.fortuna.ical4j.model.DateTime.toString(DateTime.java:503)
at net.fortuna.ical4j.model.component.Observance.calculateOnset(Observance.java:286)
at net.fortuna.ical4j.model.component.Observance.getLatestOnset(Observance.java:146)
at net.fortuna.ical4j.model.component.VTimeZone.getApplicableObservance(VTimeZone.java:200)
at net.fortuna.ical4j.model.TimeZone.getOffset(TimeZone.java:122)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2285)
at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2254)
at java.util.Calendar.setTimeInMillis(Calendar.java:1122)


[...]

This PR/issue depends on:

Seems to be fixed with ical4j 3.2.14.

@ArnyminerZ Can you please try your test (from the linked ical4j issue) with ical4j 3.2.13 and 3.2.14 and verify that it's fixed? And if yes, prepare a PR that updates to 3.2.14 and closes this issue.

Looks like it has been fixed at some point. So patches needed. Both the ICS posted by Sunik and the one in the ical4j issue work fine.

Closing until further cases

It's fixed without updating to 3.2.14?

Ah we're on 3.2.14 already