--- camel/providers/groupwise/camel-groupwise-folder.c +++ camel/providers/groupwise/camel-groupwise-folder.c @@ -229,8 +229,11 @@ groupwise_populate_details_from_item (CamelMimeMessage *msg, EGwItem *item) time_t actual_time; int offset = 0; dtstring = e_gw_item_get_creation_date (item); - time = e_gw_connection_get_date_from_string (dtstring); - actual_time = camel_header_decode_date (ctime(&time), NULL); + if (dtstring) { + time = e_gw_connection_get_date_from_string (dtstring); + actual_time = camel_header_decode_date (ctime(&time), NULL); + } else + actual_time = (time_t) 0; camel_mime_message_set_date (msg, actual_time, offset); } } @@ -1270,7 +1273,7 @@ gw_update_cache (CamelFolder *folder, GList *list, CamelException *ex, gboolean int folder_needs_caching; - camel_object_get (folder, NULL, CAMEL_OFFLINE_FOLDER_ARG_SYNC_OFFLINE, &folder_needs_caching, NULL); + camel_object_get (folder, NULL, CAMEL_OFFLINE_FOLDER_SYNC_OFFLINE, &folder_needs_caching, NULL); changes = camel_folder_change_info_new (); container_id = g_strdup (camel_groupwise_store_container_id_lookup (gw_store, folder->full_name)); @@ -1449,8 +1452,12 @@ gw_update_cache (CamelFolder *folder, GList *list, CamelException *ex, gboolean time_t time; time_t actual_time; temp_date = e_gw_item_get_creation_date (item); - time = e_gw_connection_get_date_from_string (temp_date); - actual_time = camel_header_decode_date (ctime(&time), NULL); + if (temp_date) { + /* Creation date can be returned as null for auto-generated meetings */ + time = e_gw_connection_get_date_from_string (temp_date); + actual_time = camel_header_decode_date (ctime(&time), NULL); + } else + actual_time = (time_t) 0; mi->info.date_sent = mi->info.date_received = actual_time; } } @@ -1670,8 +1677,11 @@ gw_update_summary ( CamelFolder *folder, GList *list,CamelException *ex) time_t time; time_t actual_time; temp_date = e_gw_item_get_creation_date (item); - time = e_gw_connection_get_date_from_string (temp_date); - actual_time = camel_header_decode_date (ctime(&time), NULL); + if (temp_date) { + time = e_gw_connection_get_date_from_string (temp_date); + actual_time = camel_header_decode_date (ctime(&time), NULL); + } else + actual_time = (time_t) 0; mi->info.date_sent = mi->info.date_received = actual_time; } } --- servers/groupwise/e-gw-item.c +++ servers/groupwise/e-gw-item.c @@ -307,6 +307,11 @@ e_gw_item_dispose (GObject *object) priv->classification = NULL; } + if (priv->security) { + g_free (priv->security); + priv->security = NULL; + } + if (priv->accept_level) { g_free (priv->accept_level); priv->accept_level = NULL; --- servers/groupwise/e-gw-connection.c +++ servers/groupwise/e-gw-connection.c @@ -1813,39 +1813,41 @@ e_gw_connection_get_server_time (EGwConnection *cnc) static time_t timet_from_string (const char *str) { - struct tm date; - int len, i; + struct tm date; + int len, i; - g_return_val_if_fail (str != NULL, -1); + g_return_val_if_fail (str != NULL, -1); - /* yyyymmdd[Thhmmss[Z]] */ - len = strlen (str); + /* yyyymmdd[Thhmmss[Z]] */ + len = strlen (str); - if (!(len == 8 || len == 15 || len == 16)) - return -1; + if (!(len == 8 || len == 15 || len == 16)) + return -1; - for (i = 0; i < len; i++) - if (!((i != 8 && i != 15 && isdigit (str[i])) - || (i == 8 && str[i] == 'T') - || (i == 15 && str[i] == 'Z'))) - return -1; + for (i = 0; i < len; i++) + if (!((i != 8 && i != 15 && isdigit (str[i])) + || (i == 8 && str[i] == 'T') + || (i == 15 && str[i] == 'Z'))) + return -1; #define digit_at(x,y) (x[y] - '0') - date.tm_year = digit_at (str, 0) * 1000 - + digit_at (str, 1) * 100 - + digit_at (str, 2) * 10 - + digit_at (str, 3) -1900; - date.tm_mon = digit_at (str, 4) * 10 + digit_at (str, 5) -1; - date.tm_mday = digit_at (str, 6) * 10 + digit_at (str, 7); - if (len > 8) { - date.tm_hour = digit_at (str, 9) * 10 + digit_at (str, 10); - date.tm_min = digit_at (str, 11) * 10 + digit_at (str, 12); - date.tm_sec = digit_at (str, 13) * 10 + digit_at (str, 14); - } else - date.tm_hour = date.tm_min = date.tm_sec = 0; + date.tm_year = digit_at (str, 0) * 1000 + + digit_at (str, 1) * 100 + + digit_at (str, 2) * 10 + + digit_at (str, 3) -1900; + date.tm_mon = digit_at (str, 4) * 10 + digit_at (str, 5) -1; + date.tm_mday = digit_at (str, 6) * 10 + digit_at (str, 7); + if (len > 8) { + date.tm_hour = digit_at (str, 9) * 10 + digit_at (str, 10); + date.tm_min = digit_at (str, 11) * 10 + digit_at (str, 12); + date.tm_sec = digit_at (str, 13) * 10 + digit_at (str, 14); + } else + date.tm_hour = date.tm_min = date.tm_sec = 0; + + date.tm_wday = date.tm_yday = date.tm_isdst = 0; - return mktime (&date); + return mktime (&date); } char *