--- calendar/gui/e-itip-control.c.bug-535459 2008-06-09 18:05:15.000000000 -0400 +++ calendar/gui/e-itip-control.c 2008-06-09 18:05:15.000000000 -0400 @@ -1684,8 +1684,14 @@ e_itip_control_set_data (EItipControl *i priv->top_level = e_cal_util_new_top_level (); priv->main_comp = icalparser_parse_string (priv->vcalendar); - if (priv->main_comp == NULL) { + if (priv->main_comp == NULL || !is_icalcomp_valid (priv->main_comp)) { write_error_html (itip, _("The attachment does not contain a valid calendar message")); + + if (priv->main_comp) { + icalcomponent_free (priv->main_comp); + priv->main_comp = NULL; + } + return; } --- calendar/gui/itip-utils.c.bug-535459 2008-06-09 18:05:15.000000000 -0400 +++ calendar/gui/itip-utils.c 2008-06-09 18:05:15.000000000 -0400 @@ -1769,3 +1769,26 @@ itip_publish_comp (ECal *client, gchar * return TRUE; } +static gboolean +check_time (const struct icaltimetype tmval, gboolean can_null_time) +{ + if (icaltime_is_null_time (tmval)) + return can_null_time; + + return icaltime_is_valid_time (tmval) && + tmval.month >= 1 && tmval.month <= 12 && + tmval.day >= 1 && tmval.day <= 31 && + tmval.hour >= 0 && tmval.hour < 24 && + tmval.minute >= 0 && tmval.minute < 60 && + tmval.second >= 0 && tmval.second < 60; +} + +/* returns whether the passed-in icalcomponent is valid or not. It does some sanity checks on values too. */ +gboolean +is_icalcomp_valid (icalcomponent *icalcomp) +{ + return icalcomp && + icalcomponent_is_valid (icalcomp) && + check_time (icalcomponent_get_dtstart (icalcomp), FALSE) && + check_time (icalcomponent_get_dtend (icalcomp), TRUE); +} --- calendar/gui/itip-utils.h.bug-535459 2007-10-12 03:04:17.000000000 -0400 +++ calendar/gui/itip-utils.h 2008-06-09 18:05:15.000000000 -0400 @@ -51,4 +51,6 @@ gboolean itip_publish_begin (ECalCompone gboolean reply_to_calendar_comp (ECalComponentItipMethod method, ECalComponent *send_comp, ECal *client, gboolean reply_all, icalcomponent *zones, GSList *attachments_list); +gboolean is_icalcomp_valid (icalcomponent *icalcomp); + #endif --- plugins/itip-formatter/itip-formatter.c.bug-535459 2007-11-25 21:30:12.000000000 -0500 +++ plugins/itip-formatter/itip-formatter.c 2008-06-09 18:11:26.000000000 -0400 @@ -1360,10 +1360,15 @@ extract_itip_data (FormatItipPObject *pi pitip->top_level = e_cal_util_new_top_level (); pitip->main_comp = icalparser_parse_string (pitip->vcalendar); - if (pitip->main_comp == NULL) { + if (pitip->main_comp == NULL || !is_icalcomp_valid (pitip->main_comp)) { set_itip_error (pitip, container, _("The calendar attached is not valid"), _("The message claims to contain a calendar, but the calendar is not a valid iCalendar.")); + + if (pitip->main_comp) { + icalcomponent_free (pitip->main_comp); + pitip->main_comp = NULL; + } return FALSE; }