diff options
-rw-r--r-- | calendar/ChangeLog | 10 | ||||
-rw-r--r-- | calendar/gui/e-itip-control.c | 8 | ||||
-rw-r--r-- | calendar/gui/itip-utils.c | 23 | ||||
-rw-r--r-- | calendar/gui/itip-utils.h | 2 | ||||
-rw-r--r-- | plugins/itip-formatter/ChangeLog | 7 | ||||
-rw-r--r-- | plugins/itip-formatter/itip-formatter.c | 8 |
6 files changed, 55 insertions, 3 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 9b0b915d71..01a3f216ea 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,13 @@ +2008-05-29 Milan Crha <mcrha@redhat.com> + + ** Fix for bug #535459 + + * gui/itip-utils.h: (is_icalcomp_valid): + * gui/itip-utils.c: (is_icalcomp_valid), (check_time): + New function to make some sanity checks on component properties. + * gui/e-itip-control.c: (e_itip_control_set_data): + Do not use component when sanity check fails. + 2008-05-23 Matthew Barnes <mbarnes@redhat.com> ** Fixes part of bug #534476 diff --git a/calendar/gui/e-itip-control.c b/calendar/gui/e-itip-control.c index 81a2458106..f574d86b06 100644 --- a/calendar/gui/e-itip-control.c +++ b/calendar/gui/e-itip-control.c @@ -1676,8 +1676,14 @@ e_itip_control_set_data (EItipControl *itip, const gchar *text) 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; } diff --git a/calendar/gui/itip-utils.c b/calendar/gui/itip-utils.c index e529042051..cddb3d9b4f 100644 --- a/calendar/gui/itip-utils.c +++ b/calendar/gui/itip-utils.c @@ -1666,3 +1666,26 @@ itip_publish_comp (ECal *client, gchar *uri, gchar *username, 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); +} diff --git a/calendar/gui/itip-utils.h b/calendar/gui/itip-utils.h index e7014c9f47..1e8ebc2849 100644 --- a/calendar/gui/itip-utils.h +++ b/calendar/gui/itip-utils.h @@ -51,4 +51,6 @@ gboolean itip_publish_begin (ECalComponent *pub_comp, ECal *client, 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 diff --git a/plugins/itip-formatter/ChangeLog b/plugins/itip-formatter/ChangeLog index 5befbf33a1..fbcd25aa96 100644 --- a/plugins/itip-formatter/ChangeLog +++ b/plugins/itip-formatter/ChangeLog @@ -1,3 +1,10 @@ +2008-05-29 Milan Crha <mcrha@redhat.com> + + ** Fix for bug #535459 + + * itip-formatter.c: (extract_itip_data): + Do not use component when sanity check fails. + 2008-05-22 Matthew Barnes <mbarnes@redhat.com> ** Fixes part of bug #534360 diff --git a/plugins/itip-formatter/itip-formatter.c b/plugins/itip-formatter/itip-formatter.c index 55b182752d..b40c6519e2 100644 --- a/plugins/itip-formatter/itip-formatter.c +++ b/plugins/itip-formatter/itip-formatter.c @@ -1372,11 +1372,16 @@ extract_itip_data (struct _itip_puri *pitip, GtkContainer *container) 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; } @@ -1849,7 +1854,6 @@ check_is_instance (icalcomponent *icalcomp) return FALSE; } - static gboolean in_proper_folder (CamelFolder *folder) { |