[evolution-ews] Bug 735799 - Workaround crash for messages with no item ID
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-ews] Bug 735799 - Workaround crash for messages with no item ID
- Date: Mon, 1 Sep 2014 13:54:29 +0000 (UTC)
commit b37c4dc23b4e3721db3238bdfdcde402a81fbd27
Author: Milan Crha <mcrha redhat com>
Date: Mon Sep 1 15:53:20 2014 +0200
Bug 735799 - Workaround crash for messages with no item ID
It can have a side effect of a missing message in the list, where
the only chance to get it back will be with a removal of
~/.cache/evolution/mail/<ews-account-uid>/folders.db file.
src/camel/camel-ews-folder.c | 21 ++++++++++++++++++++-
src/camel/camel-ews-utils.c | 20 ++++++++++++++++----
2 files changed, 36 insertions(+), 5 deletions(-)
---
diff --git a/src/camel/camel-ews-folder.c b/src/camel/camel-ews-folder.c
index 493664c..f02a3ba 100644
--- a/src/camel/camel-ews-folder.c
+++ b/src/camel/camel-ews-folder.c
@@ -1422,9 +1422,20 @@ sync_updated_items (CamelEwsFolder *ews_folder,
for (l = updated_items; l != NULL; l = g_slist_next (l)) {
EEwsItem *item = (EEwsItem *) l->data;
- const EwsId *id = e_ews_item_get_id (item);
+ const EwsId *id;
CamelMessageInfo *mi;
+ if (!item)
+ continue;
+
+ id = e_ews_item_get_id (item);
+ if (!id) {
+ g_warning ("%s: Missing ItemId for item type %d (subject:%s)", G_STRFUNC,
e_ews_item_get_item_type (item),
+ e_ews_item_get_subject (item) ? e_ews_item_get_subject (item) : "???");
+ g_object_unref (item);
+ continue;
+ }
+
/* Compare the item_type from summary as the updated items seems to
* arrive as generic types while its not the case */
mi = camel_folder_summary_get (folder->summary, id->id);
@@ -1533,6 +1544,14 @@ sync_created_items (CamelEwsFolder *ews_folder,
id = e_ews_item_get_id (item);
item_type = e_ews_item_get_item_type (item);
+
+ if (!id) {
+ g_warning ("%s: Missing ItemId for item type %d (subject:%s)", G_STRFUNC, item_type,
+ e_ews_item_get_subject (item) ? e_ews_item_get_subject (item) : "???");
+ g_object_unref (item);
+ continue;
+ }
+
/* created_msg_ids are items other than generic item. We fetch them
* separately since the property sets vary */
/* FIXME: Do we need to handle any other item types
diff --git a/src/camel/camel-ews-utils.c b/src/camel/camel-ews-utils.c
index ab1bf1e..c6996fd 100644
--- a/src/camel/camel-ews-utils.c
+++ b/src/camel/camel-ews-utils.c
@@ -762,8 +762,14 @@ camel_ews_utils_sync_updated_items (CamelEwsFolder *ews_folder,
}
id = e_ews_item_get_id (item);
- mi = (CamelEwsMessageInfo *)
- camel_folder_summary_get (folder->summary, id->id);
+ if (!id) {
+ g_warning ("%s: Missing ItemId for item type %d (subject:%s)", G_STRFUNC,
e_ews_item_get_item_type (item),
+ e_ews_item_get_subject (item) ? e_ews_item_get_subject (item) : "???");
+ g_object_unref (item);
+ continue;
+ }
+
+ mi = (CamelEwsMessageInfo *) camel_folder_summary_get (folder->summary, id->id);
if (mi) {
guint32 server_flags;
gboolean changed, was_changed;
@@ -842,8 +848,14 @@ camel_ews_utils_sync_created_items (CamelEwsFolder *ews_folder,
}
id = e_ews_item_get_id (item);
- mi = (CamelEwsMessageInfo *)
- camel_folder_summary_get (folder->summary, id->id);
+ if (!id) {
+ g_warning ("%s: Missing ItemId for item type %d (subject:%s)", G_STRFUNC,
e_ews_item_get_item_type (item),
+ e_ews_item_get_subject (item) ? e_ews_item_get_subject (item) : "???");
+ g_object_unref (item);
+ continue;
+ }
+
+ mi = (CamelEwsMessageInfo *) camel_folder_summary_get (folder->summary, id->id);
if (mi) {
camel_message_info_unref (mi);
g_object_unref (item);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]