File bnc-448079-gw-memory-issues.patch of Package evolution-data-server

--- 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 *
openSUSE Build Service is sponsored by