[evolution-ews] Check validity of returned values in 'Folder Sizes' function
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-ews] Check validity of returned values in 'Folder Sizes' function
- Date: Mon, 12 Feb 2018 11:54:07 +0000 (UTC)
commit 4eaf3eee58ef3e4099a8ec45962368f2102dc1f5
Author: Milan Crha <mcrha redhat com>
Date: Mon Feb 12 12:51:42 2018 +0100
Check validity of returned values in 'Folder Sizes' function
It could happen that the server returned an error instead of a folder
information, which then led to a crash in this code part.
This had been reported downstream at:
https://bugzilla.redhat.com/show_bug.cgi?id=1544296
src/configuration/e-ews-config-utils.c | 11 +++++++++--
src/server/e-ews-folder.c | 2 +-
src/server/e-ews-folder.h | 2 +-
3 files changed, 11 insertions(+), 4 deletions(-)
---
diff --git a/src/configuration/e-ews-config-utils.c b/src/configuration/e-ews-config-utils.c
index 4a7fbea..c303784 100644
--- a/src/configuration/e-ews-config-utils.c
+++ b/src/configuration/e-ews-config-utils.c
@@ -689,14 +689,21 @@ ews_settings_get_folder_sizes_thread (gpointer user_data)
fsd->cancellable, &fsd->error);
for (l = folders_list; l != NULL; l = l->next) {
+ const EEwsFolder *folder = l->data;
const EwsFolderId *folder_id;
gchar *folder_full_name;
gchar *folder_size;
- folder_id = e_ews_folder_get_id (l->data);
+ if (!folder || e_ews_folder_is_error (folder))
+ continue;
+
+ folder_id = e_ews_folder_get_id (folder);
+ if (!folder_id)
+ continue;
+
folder_full_name = camel_ews_store_summary_get_folder_full_name (
fsd->ews_store->summary, folder_id->id, NULL);
- folder_size = g_format_size (e_ews_folder_get_size (l->data));
+ folder_size = g_format_size (e_ews_folder_get_size (folder));
g_hash_table_insert (fsd->folder_sizes, folder_full_name, folder_size);
}
diff --git a/src/server/e-ews-folder.c b/src/server/e-ews-folder.c
index 0c5a99b..a80f845 100644
--- a/src/server/e-ews-folder.c
+++ b/src/server/e-ews-folder.c
@@ -297,7 +297,7 @@ e_ews_folder_new_from_error (const GError *error)
}
gboolean
-e_ews_folder_is_error (EEwsFolder *folder)
+e_ews_folder_is_error (const EEwsFolder *folder)
{
g_return_val_if_fail (E_IS_EWS_FOLDER (folder), TRUE);
diff --git a/src/server/e-ews-folder.h b/src/server/e-ews-folder.h
index 546f39f..8de06fb 100644
--- a/src/server/e-ews-folder.h
+++ b/src/server/e-ews-folder.h
@@ -59,7 +59,7 @@ const gchar * e_ews_folder_type_to_nick (EEwsFolderType folder_type);
EEwsFolderType e_ews_folder_type_from_nick (const gchar *folder_type_nick);
EEwsFolder * e_ews_folder_new_from_soap_parameter (ESoapParameter *param);
EEwsFolder * e_ews_folder_new_from_error (const GError *error);
-gboolean e_ews_folder_is_error (EEwsFolder *folder);
+gboolean e_ews_folder_is_error (const EEwsFolder *folder);
const GError * e_ews_folder_get_error (const EEwsFolder *folder);
const gchar * e_ews_folder_get_name (const EEwsFolder *folder);
void e_ews_folder_set_name (EEwsFolder *folder, const gchar *new_name);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]