Index: src/libical/icalrecur.c =================================================================== --- src/libical/icalrecur.c (revision 937) +++ src/libical/icalrecur.c (working copy) @@ -2546,18 +2546,18 @@ icstart = icaltime_from_timet_with_zone(start,0,0); recur = icalrecurrencetype_from_string(rule); + ritr = icalrecur_iterator_new(recur,icstart); + if(ritr) { + for(next = icalrecur_iterator_next(ritr); + !icaltime_is_null_time(next) && i < count; + next = icalrecur_iterator_next(ritr)){ - for(ritr = icalrecur_iterator_new(recur,icstart), - next = icalrecur_iterator_next(ritr); - !icaltime_is_null_time(next) && i < count; - next = icalrecur_iterator_next(ritr)){ - - tt = icaltime_as_timet(next); + tt = icaltime_as_timet(next); - if (tt >= start ){ - array[i++] = tt; - } - + if (tt >= start ){ + array[i++] = tt; + } + } } icalrecur_iterator_free(ritr); Index: src/libical/icaltimezone.c =================================================================== --- src/libical/icaltimezone.c (revision 936) +++ src/libical/icaltimezone.c (working copy) @@ -689,7 +689,7 @@ } rrule_iterator = icalrecur_iterator_new (rrule, dtstart); - for (;;) { + for (;rrule_iterator;) { occ = icalrecur_iterator_next (rrule_iterator); if (occ.year > end_year || icaltime_is_null_time (occ)) break; Index: src/libical/icalcomponent.c =================================================================== --- src/libical/icalcomponent.c (revision 936) +++ src/libical/icalcomponent.c (working copy) @@ -882,7 +882,7 @@ icalrecur_iterator *exrule_itr = icalrecur_iterator_new(recur, *dtstart); struct icaltimetype exrule_time; - while (1) { + while (exrule_itr) { int result; exrule_time = icalrecur_iterator_next(exrule_itr); @@ -1044,11 +1044,13 @@ struct icalrecurrencetype recur = icalproperty_get_rrule(rrule); icalrecur_iterator *rrule_itr = icalrecur_iterator_new(recur, dtstart); - struct icaltimetype rrule_time = icalrecur_iterator_next(rrule_itr); + struct icaltimetype rrule_time; + if(rrule_itr) + rrule_time = icalrecur_iterator_next(rrule_itr); /** note that icalrecur_iterator_next always returns dtstart the first time.. **/ - while (1) { + while (rrule_itr) { rrule_time = icalrecur_iterator_next(rrule_itr); if (icaltime_is_null_time(rrule_time))