[evolution-ews/gnome-3-4] Bug #674599 - Crash on contact view open



commit 294101adacdd2091ab42b7de2ddd2b8ce581318e
Author: Milan Crha <mcrha redhat com>
Date:   Wed Jun 6 13:08:56 2012 +0200

    Bug #674599 - Crash on contact view open

 src/addressbook/e-book-backend-ews.c |   40 +++++++++++++++++++++++++++++++--
 1 files changed, 37 insertions(+), 3 deletions(-)
---
diff --git a/src/addressbook/e-book-backend-ews.c b/src/addressbook/e-book-backend-ews.c
index 82c99ff..6b27f31 100644
--- a/src/addressbook/e-book-backend-ews.c
+++ b/src/addressbook/e-book-backend-ews.c
@@ -897,6 +897,8 @@ ews_create_contact_cb (GObject *object,
 	/* get a list of ids from server (single item) */
 	e_ews_connection_create_items_finish (cnc, res, &items, &error);
 
+	g_return_if_fail (ebews->priv->ebsdb != NULL);
+
 	if (error == NULL) {
 		EEwsItem *item = (EEwsItem *) items->data;
 
@@ -1021,6 +1023,8 @@ ews_book_remove_contact_cb (GObject *object,
 
 	simple = G_SIMPLE_ASYNC_RESULT (res);
 
+	g_return_if_fail (priv->ebsdb != NULL);
+
 	if (!g_simple_async_result_propagate_error (simple, &error))
 		deleted = e_book_backend_sqlitedb_remove_contacts (priv->ebsdb, priv->folder_id, remove_contact->sl_ids, &error);
 
@@ -1119,6 +1123,8 @@ ews_modify_contact_cb (GObject *object,
 
 	e_ews_connection_update_items_finish (cnc, res, &items, &error);
 
+	g_return_if_fail (ebews->priv->ebsdb != NULL);
+
 	if (error == NULL) {
 		EEwsItem *item = (EEwsItem *) items->data;
 
@@ -1245,6 +1251,8 @@ e_book_backend_ews_modify_contacts (EBookBackend *backend,
 		return;
 	}
 
+	g_return_if_fail (priv->ebsdb != NULL);
+
 	contact = e_contact_new_from_vcard (vcards->data);
 
 	id = g_new0 (EwsId, 1);
@@ -1322,7 +1330,7 @@ e_book_backend_ews_get_contact_list (EBookBackend *backend,
 	priv = ebews->priv;
 
 	if (!priv->is_online) {
-		if (e_book_backend_sqlitedb_get_is_populated (priv->ebsdb, priv->folder_id, NULL)) {
+		if (priv->ebsdb && e_book_backend_sqlitedb_get_is_populated (priv->ebsdb, priv->folder_id, NULL)) {
 			list = e_book_backend_sqlitedb_search (priv->ebsdb, priv->folder_id, query, NULL, NULL, NULL, &error);
 			l = list;
 			while (l) {
@@ -1349,7 +1357,7 @@ e_book_backend_ews_get_contact_list (EBookBackend *backend,
 		return;
 	}
 
-	if (e_book_backend_sqlitedb_get_is_populated (priv->ebsdb, priv->folder_id, NULL)) {
+	if (priv->ebsdb && e_book_backend_sqlitedb_get_is_populated (priv->ebsdb, priv->folder_id, NULL)) {
 		list = e_book_backend_sqlitedb_search (priv->ebsdb, priv->folder_id, query, NULL, NULL, NULL, &error);
 		l = list;
 		while (l) {
@@ -1612,6 +1620,9 @@ ews_gal_needs_update (EBookBackendEws *cbews,
 	gboolean ret = FALSE;
 	gchar *tmp;
 
+	if (!priv->ebsdb)
+		return FALSE;
+
 	tmp = e_book_backend_sqlitedb_get_key_value (priv->ebsdb, priv->folder_id, "seq", error);
 	if (error)
 		goto exit;
@@ -1677,12 +1688,16 @@ ews_remove_old_gal_file (EBookBackendEws *cbews,
 	EBookBackendEwsPrivate *priv = cbews->priv;
 	gchar *filename;
 
+	if (!priv->ebsdb)
+		return FALSE;
+
 	filename = e_book_backend_sqlitedb_get_key_value (priv->ebsdb, priv->folder_id, "oab-filename", error);
 	if (*error)
 		return FALSE;
 
 	if (filename)
 		g_unlink (filename);
+	g_free (filename);
 
 	return TRUE;
 }
@@ -1703,6 +1718,8 @@ ews_gal_store_contact (EContact *contact,
 	struct _db_data *data = (struct _db_data *) user_data;
 	EBookBackendEwsPrivate *priv = data->cbews->priv;
 
+	g_return_if_fail (priv->ebsdb != NULL);
+
 	data->contact_collector = g_slist_prepend (data->contact_collector, g_object_ref (contact));
 	data->collected_length += 1;
 
@@ -1743,6 +1760,8 @@ ews_replace_gal_in_db (EBookBackendEws *cbews,
 	gboolean ret = TRUE;
 	struct _db_data data;
 
+	g_return_val_if_fail (priv->ebsdb != NULL, FALSE);
+
 	/* remove the old address-book and create a new one in db */
 	if (e_book_backend_sqlitedb_get_is_populated (priv->ebsdb, priv->folder_id, NULL)) {
 		ret = e_book_backend_sqlitedb_delete_addressbook (priv->ebsdb, priv->folder_id, error);
@@ -1798,6 +1817,10 @@ ebews_start_gal_sync (gpointer data)
 		goto exit;
 	}
 
+	g_warn_if_fail (priv->ebsdb != NULL);
+	if (!priv->ebsdb)
+		goto exit;
+
 	full = (EwsOALDetails *) full_l->data;
 	/* TODO fetch differential updates if available instead of downloading the whole GAL */
 	if (!e_book_backend_sqlitedb_get_is_populated (priv->ebsdb, priv->folder_id, NULL) || ews_gal_needs_update (cbews, full, &error)) {
@@ -1875,6 +1898,8 @@ ebews_sync_deleted_items (EBookBackendEws *ebews,
 
 	priv = ebews->priv;
 
+	g_return_if_fail (priv->ebsdb != NULL);
+
 	for (l = deleted_ids; l != NULL; l = g_slist_next (l)) {
 		gchar *id = (gchar *) l->data;
 		gboolean partial_content;
@@ -1899,6 +1924,8 @@ ebews_store_contact_items (EBookBackendEws *ebews,
 
 	priv = ebews->priv;
 
+	g_return_if_fail (priv->ebsdb != NULL);
+
 	for (l = new_items; l != NULL; l = g_slist_next (l)) {
 		EContact *contact;
 		gint i, element_type;
@@ -2003,6 +2030,8 @@ ebews_store_distribution_list_items (EBookBackendEws *ebews,
 	GSList *l;
 	EContact *contact;
 
+	g_return_if_fail (ebews->priv->ebsdb != NULL);
+
 	contact = e_contact_new ();
 	e_contact_set (contact, E_CONTACT_UID, id->id);
 	e_contact_set (contact, E_CONTACT_REV, id->change_key);
@@ -2214,6 +2243,8 @@ ebews_start_sync (gpointer data)
 	ebews = (EBookBackendEws *) data;
 	priv = ebews->priv;
 
+	g_return_val_if_fail (priv->ebsdb != NULL, FALSE);
+
 	status_message = g_strdup (_("Syncing contacts..."));
 	e_book_backend_foreach_view (E_BOOK_BACKEND (ebews), book_view_notify_status, status_message);
 	g_free (status_message);
@@ -2368,6 +2399,8 @@ fetch_from_offline (EBookBackendEws *ews,
 		return;
 	}
 
+	g_return_if_fail (priv->ebsdb != NULL);
+
 	contacts = e_book_backend_sqlitedb_search (priv->ebsdb, priv->folder_id, query, NULL, NULL, NULL, &error);
 	for (l = contacts; l != NULL; l = g_slist_next (l)) {
 		EbSdbSearchData *s_data = (EbSdbSearchData *) l->data;
@@ -2576,6 +2609,8 @@ e_book_backend_ews_load_source (EBookBackend *backend,
 			priv->marked_for_offline = TRUE;
 	} else {
 		priv->folder_id = e_source_get_duped_property (source, "oal_id");
+		priv->marked_for_offline = FALSE;
+		priv->is_writable = FALSE;
 
 		/* If folder_id is present it means the GAL is marked for offline usage, we do not check for offline_sync property */
 		if (priv->folder_id) {
@@ -2592,7 +2627,6 @@ e_book_backend_ews_load_source (EBookBackend *backend,
 				return;
 			}
 			priv->marked_for_offline = TRUE;
-			priv->is_writable = FALSE;
 		}
 	}
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]