I have attached a new patch that incoporates all upstream mods and which
I've tested thoroughly. I no longer experience leaks in the exchange
connector. In my opinion, this one is good to release.
Ben
diff -urN evolution-data-server-1.4.2.1.orig/servers/exchange/lib/e2k-freebusy.c evolution-data-server-1.4.2.1/servers/exchange/lib/e2k-freebusy.c
--- evolution-data-server-1.4.2.1.orig/servers/exchange/lib/e2k-freebusy.c 2005-09-02 11:37:45.000000000 -0300
+++ evolution-data-server-1.4.2.1/servers/exchange/lib/e2k-freebusy.c 2006-02-01 07:15:24.000000000 -0400
@@ -189,6 +189,8 @@
if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status) || nresults == 0) {
/* FIXME: create it */
g_free (uri);
+ if (nresults)
+ e2k_results_free (results, nresults);
return NULL;
}
diff -urN evolution-data-server-1.4.2.1.orig/servers/exchange/storage/e-folder-exchange.c evolution-data-server-1.4.2.1/servers/exchange/storage/e-folder-exchange.c
--- evolution-data-server-1.4.2.1.orig/servers/exchange/storage/e-folder-exchange.c 2005-11-28 23:03:48.000000000 -0400
+++ evolution-data-server-1.4.2.1/servers/exchange/storage/e-folder-exchange.c 2006-02-01 07:24:25.000000000 -0400
@@ -478,14 +478,15 @@
physical_uri = e_folder_get_physical_uri (folder);
internal_uri = e_folder_exchange_get_internal_uri (folder);
permanent_uri = e_folder_exchange_get_permanent_uri (folder);
+
+ g_return_val_if_fail (name && type && physical_uri && internal_uri,
+ FALSE);
+
if ((fsize = e_folder_exchange_get_folder_size (folder)) >= 0)
folder_size = g_strdup_printf ("%llu", fsize);
else
return FALSE;
- g_return_val_if_fail (name && type && physical_uri && internal_uri,
- FALSE);
-
doc = xmlNewDoc ("1.0");
root = xmlNewDocNode (doc, NULL, "connector-folder", NULL);
xmlNewProp (root, "version", "1");
@@ -502,6 +503,9 @@
status = xmlSaveFile (filename, doc);
xmlFreeDoc (doc);
+
+ g_free (folder_size);
+
if (status < 0)
unlink (filename);
diff -urN evolution-data-server-1.4.2.1.orig/servers/exchange/storage/exchange-account.c evolution-data-server-1.4.2.1/servers/exchange/storage/exchange-account.c
--- evolution-data-server-1.4.2.1.orig/servers/exchange/storage/exchange-account.c 2005-11-28 23:03:48.000000000 -0400
+++ evolution-data-server-1.4.2.1/servers/exchange/storage/exchange-account.c 2006-02-01 07:00:15.000000000 -0400
@@ -1616,6 +1616,8 @@
account->priv->connecting = FALSE;
*info_result = EXCHANGE_ACCOUNT_UNKNOWN_ERROR;
g_mutex_unlock (account->priv->connect_lock);
+ if (nresults)
+ e2k_results_free (results, nresults);
return NULL; /* FIXME: what error has happened? */
}
@@ -1633,6 +1635,7 @@
timezone = e2k_properties_get_prop (results[0].props, E2K_PR_EXCHANGE_TIMEZONE);
if (timezone)
account->default_timezone = g_strdup (timezone);
+ e2k_results_free (results, nresults);
}
if (!setup_account_hierarchies (account)) {
@@ -1789,8 +1792,11 @@
&results, &nresults);
g_free (foreign_uri);
- if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status) || nresults == 0)
+ if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status) || nresults == 0) {
+ if (nresults)
+ e2k_results_free (results, nresults);
return NULL;
+ }
prop = e2k_properties_get_prop (results[0].props, std_uri_prop);
if (prop)
diff -urN evolution-data-server-1.4.2.1.orig/servers/exchange/storage/exchange-esource.c evolution-data-server-1.4.2.1/servers/exchange/storage/exchange-esource.c
--- evolution-data-server-1.4.2.1.orig/servers/exchange/storage/exchange-esource.c 2005-09-02 11:37:45.000000000 -0300
+++ evolution-data-server-1.4.2.1/servers/exchange/storage/exchange-esource.c 2006-02-01 07:13:10.000000000 -0400
@@ -102,8 +102,10 @@
}
e_source_set_property (source, "username", username);
e_source_set_property (source, "auth-domain", "Exchange");
- if (authtype)
+ if (authtype) {
e_source_set_property (source, "auth-type", authtype);
+ g_free (authtype);
+ }
if (is_contacts_folder)
e_source_set_property (source, "auth", "plain/password");
else
@@ -128,8 +130,10 @@
e_source_set_property (source, "username", username);
e_source_set_property (source, "auth-domain", "Exchange");
- if (authtype)
+ if (authtype) {
e_source_set_property (source, "auth-type", authtype);
+ g_free (authtype);
+ }
if (is_contacts_folder)
e_source_set_property (source, "auth", "plain/password");
else
diff -urN evolution-data-server-1.4.2.1.orig/servers/exchange/storage/exchange-hierarchy-favorites.c evolution-data-server-1.4.2.1/servers/exchange/storage/exchange-hierarchy-favorites.c
--- evolution-data-server-1.4.2.1.orig/servers/exchange/storage/exchange-hierarchy-favorites.c 2005-09-02 11:37:45.000000000 -0300
+++ evolution-data-server-1.4.2.1/servers/exchange/storage/exchange-hierarchy-favorites.c 2006-02-01 07:03:35.000000000 -0400
@@ -155,6 +155,9 @@
g_strdup (shortcut_uri));
e2k_results_free (results, nresults);
}
+ else if (nresults) {
+ e2k_results_free (results, nresults);
+ }
g_free (perm_url);
}
diff -urN evolution-data-server-1.4.2.1.orig/servers/exchange/storage/exchange-hierarchy-foreign.c evolution-data-server-1.4.2.1/servers/exchange/storage/exchange-hierarchy-foreign.c
--- evolution-data-server-1.4.2.1.orig/servers/exchange/storage/exchange-hierarchy-foreign.c 2005-09-02 11:37:45.000000000 -0300
+++ evolution-data-server-1.4.2.1/servers/exchange/storage/exchange-hierarchy-foreign.c 2006-02-01 07:08:01.000000000 -0400
@@ -146,6 +146,8 @@
hfor->priv->checked_hide_private = TRUE;
if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status) || nresults == 0) {
+ if (nresults)
+ e2k_results_free (results, nresults);
g_mutex_unlock (hfor->priv->hide_private_lock);
return;
}
@@ -223,14 +225,19 @@
status = e2k_context_propfind (ctx, NULL, uri,
folder_props, n_folder_props,
&results, &nresults);
- if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status))
+ if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status)) {
+ if (nresults)
+ e2k_results_free (results, nresults);
return exchange_hierarchy_webdav_status_to_folder_result (status);
+ }
if (nresults == 0)
return EXCHANGE_ACCOUNT_FOLDER_DOES_NOT_EXIST;
access = e2k_properties_get_prop (results[0].props, PR_ACCESS);
- if (!access || !atoi (access))
+ if (!access || !atoi (access)) {
+ e2k_results_free (results, nresults);
return EXCHANGE_ACCOUNT_FOLDER_PERMISSION_DENIED;
+ }
folder = exchange_hierarchy_webdav_parse_folder (hwd, hier->toplevel,
&results[0]);
diff -urN evolution-data-server-1.4.2.1.orig/servers/exchange/storage/exchange-hierarchy-somedav.c evolution-data-server-1.4.2.1/servers/exchange/storage/exchange-hierarchy-somedav.c
--- evolution-data-server-1.4.2.1.orig/servers/exchange/storage/exchange-hierarchy-somedav.c 2005-09-02 11:37:45.000000000 -0300
+++ evolution-data-server-1.4.2.1/servers/exchange/storage/exchange-hierarchy-somedav.c 2006-02-01 07:10:00.000000000 -0400
@@ -238,13 +238,18 @@
status = e2k_context_propfind (ctx, NULL, uri,
folder_props, n_folder_props,
&results, &nresults);
- if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status))
+ if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status)) {
+ if (nresults)
+ e2k_results_free (results, nresults);
return exchange_hierarchy_webdav_status_to_folder_result (status);
+ }
if (nresults == 0)
return EXCHANGE_ACCOUNT_FOLDER_DOES_NOT_EXIST;
- if (folder_is_unreadable (results[0].props))
+ if (folder_is_unreadable (results[0].props)) {
+ e2k_results_free (results, nresults);
return EXCHANGE_ACCOUNT_FOLDER_PERMISSION_DENIED;
+ }
folder = exchange_hierarchy_webdav_parse_folder (hwd, hier->toplevel,
&results[0]);
diff -urN evolution-data-server-1.4.2.1.orig/servers/exchange/storage/exchange-hierarchy-webdav.c evolution-data-server-1.4.2.1/servers/exchange/storage/exchange-hierarchy-webdav.c
--- evolution-data-server-1.4.2.1.orig/servers/exchange/storage/exchange-hierarchy-webdav.c 2005-09-02 11:37:45.000000000 -0300
+++ evolution-data-server-1.4.2.1/servers/exchange/storage/exchange-hierarchy-webdav.c 2006-02-01 06:54:43.000000000 -0400
@@ -726,6 +726,7 @@
subtrees = g_slist_prepend (subtrees, folder);
}
exchange_hierarchy_new_folder (hier, folder);
+ g_object_unref (folder);
/* Check the folder size here */
name = e2k_properties_get_prop (result->props,
diff -urN evolution-data-server-1.4.2.1.orig/servers/exchange/storage/exchange-oof.c evolution-data-server-1.4.2.1/servers/exchange/storage/exchange-oof.c
--- evolution-data-server-1.4.2.1.orig/servers/exchange/storage/exchange-oof.c 2005-09-02 11:37:45.000000000 -0300
+++ evolution-data-server-1.4.2.1/servers/exchange/storage/exchange-oof.c 2006-02-01 07:14:16.000000000 -0400
@@ -91,8 +91,11 @@
status = e2k_context_propfind (ctx, NULL, url, &prop, 1,
&results, &nresults);
g_free (url);
- if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status) || nresults == 0)
+ if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status) || nresults == 0) {
+ if (nresults)
+ e2k_results_free (results, nresults);
return FALSE;
+ }
prop = e2k_properties_get_prop (results[0].props, E2K_PR_EXCHANGE_OOF_STATE);
*oof = prop && atoi (prop);