diff options
author | Milan Crha <mcrha@redhat.com> | 2015-11-11 17:18:52 +0100 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2015-11-11 17:19:49 +0100 |
commit | 47488aeaf6a85f20e762c07664f2a40bd64192cf (patch) | |
tree | ddb1b9c5a96c83b77f8c446abc1c13414bb55028 | |
parent | 6049bc225d8f9e7f9e30e163767a02ba93bdb369 (diff) | |
download | evolution-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.c | 18 |
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); } |