summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2015-11-11 17:18:52 +0100
committerMilan Crha <mcrha@redhat.com>2015-11-11 17:19:49 +0100
commit47488aeaf6a85f20e762c07664f2a40bd64192cf (patch)
treeddb1b9c5a96c83b77f8c446abc1c13414bb55028
parent6049bc225d8f9e7f9e30e163767a02ba93bdb369 (diff)
downloadevolution-data-server-47488aeaf6a85f20e762c07664f2a40bd64192cf.tar.gz
Bug 757789 - [IMAPx] Incorrect unref of a message info on message copy
-rw-r--r--camel/providers/imapx/camel-imapx-server.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
index 89bd8d32c..dc1606057 100644
--- a/camel/providers/imapx/camel-imapx-server.c
+++ b/camel/providers/imapx/camel-imapx-server.c
@@ -4199,9 +4199,14 @@ camel_imapx_server_copy_message_sync (CamelIMAPXServer *is,
cancellable, error);
if (success) {
- if (is->priv->copyuid_status && is->priv->copyuid_status->u.copyuid.uids &&
- is->priv->copyuid_status->u.copyuid.copied_uids &&
- is->priv->copyuid_status->u.copyuid.uids->len == is->priv->copyuid_status->u.copyuid.copied_uids->len) {
+ struct _status_info *copyuid_status = is->priv->copyuid_status;
+
+ if (ic->status && ic->status->condition == IMAPX_COPYUID)
+ copyuid_status = ic->status;
+
+ if (copyuid_status && copyuid_status->u.copyuid.uids &&
+ copyuid_status->u.copyuid.copied_uids &&
+ copyuid_status->u.copyuid.uids->len == copyuid_status->u.copyuid.copied_uids->len) {
CamelFolder *destination_folder;
destination_folder = imapx_server_ref_folder (is, destination);
@@ -4212,18 +4217,18 @@ camel_imapx_server_copy_message_sync (CamelIMAPXServer *is,
changes = camel_folder_change_info_new ();
- for (ii = 0; ii < is->priv->copyuid_status->u.copyuid.uids->len; ii++) {
+ for (ii = 0; ii < copyuid_status->u.copyuid.uids->len; ii++) {
gchar *uid;
gboolean is_new = FALSE;
- uid = g_strdup_printf ("%d", g_array_index (is->priv->copyuid_status->u.copyuid.uids, guint32, ii));
+ uid = g_strdup_printf ("%d", g_array_index (copyuid_status->u.copyuid.uids, guint32, ii));
source_info = g_hash_table_lookup (source_infos, uid);
g_free (uid);
if (!source_info)
continue;
- uid = g_strdup_printf ("%d", g_array_index (is->priv->copyuid_status->u.copyuid.copied_uids, guint32, ii));
+ uid = g_strdup_printf ("%d", g_array_index (copyuid_status->u.copyuid.copied_uids, guint32, ii));
destination_info = camel_folder_summary_get (folder->summary, uid);
if (!destination_info) {
@@ -4251,7 +4256,6 @@ camel_imapx_server_copy_message_sync (CamelIMAPXServer *is,
camel_folder_summary_add (destination_folder->summary, destination_info);
camel_folder_change_info_add_uid (changes, destination_info->uid);
- camel_message_info_unref (source_info);
if (!is_new)
camel_message_info_unref (destination_info);
}