[evolution-ews] [ECalBackendEws] Prevent crash when item has no MIME content set



commit 32fafa6e597690117503a1b709ed426c3d395f96
Author: Milan Crha <mcrha redhat com>
Date:   Tue Nov 14 12:38:38 2017 +0100

    [ECalBackendEws] Prevent crash when item has no MIME content set
    
    There could happen that the item on the server didn't have set any MIME
    content, in which case the code could dereference a NULL pointer (in libical).
    
    This had been reported downstream as:
    https://retrace.fedoraproject.org/faf/reports/1916092/

 src/calendar/e-cal-backend-ews.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)
---
diff --git a/src/calendar/e-cal-backend-ews.c b/src/calendar/e-cal-backend-ews.c
index e1bed08..7db264f 100644
--- a/src/calendar/e-cal-backend-ews.c
+++ b/src/calendar/e-cal-backend-ews.c
@@ -313,7 +313,6 @@ ecb_ews_item_to_component_sync (ECalBackendEws *cbews,
        icalcomponent *icalcomp, *vcomp;
        icaltimezone *utc_zone = icaltimezone_get_utc_timezone ();
        CamelEwsSettings *ews_settings;
-       const gchar *mime_content;
 
        g_return_val_if_fail (E_IS_CAL_BACKEND_EWS (cbews), NULL);
        g_return_val_if_fail (E_IS_EWS_ITEM (item), NULL);
@@ -468,13 +467,14 @@ ecb_ews_item_to_component_sync (ECalBackendEws *cbews,
                icalcomponent_add_component (vcomp, icalcomp);
        } else {
                struct icaltimetype dt;
+               const gchar *mime_content;
                const gchar *tzid;
                gboolean timezone_set = FALSE;
 
                mime_content = e_ews_item_get_mime_content (item);
-               vcomp = icalparser_parse_string (mime_content);
+               vcomp = mime_content && *mime_content ? icalparser_parse_string (mime_content) : NULL;
 
-               if (!vcomp && mime_content) {
+               if (!vcomp && mime_content && *mime_content) {
                        const gchar *begin_vcalendar, *end_vcalendar;
 
                        /* Workaround Exchange 2016 error, which returns invalid iCalendar object (without 
'END:VCALENDAR'),
@@ -502,7 +502,8 @@ ecb_ews_item_to_component_sync (ECalBackendEws *cbews,
                }
 
                if (!vcomp) {
-                       g_warn_if_reached ();
+                       if (mime_content)
+                               g_warn_if_reached ();
                        return NULL;
                }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]