From ec8925519fa4360d9ad4b8206e87feee55979534 Mon Sep 17 00:00:00 2001 From: Sergio Villar Senin Date: Wed, 28 Jan 2009 11:51:25 +0000 Subject: [PATCH] Fixes several potential infinite loops with corrupted account data pmo-trunk-r7330 --- .../modest-hildon2-global-settings-dialog.c | 1 + src/modest-account-mgr.c | 8 ++++++-- src/modest-tny-folder.c | 2 ++ src/modest-tny-msg.c | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/hildon2/modest-hildon2-global-settings-dialog.c b/src/hildon2/modest-hildon2-global-settings-dialog.c index 99ecd07..affde22 100644 --- a/src/hildon2/modest-hildon2-global-settings-dialog.c +++ b/src/hildon2/modest-hildon2-global-settings-dialog.c @@ -440,6 +440,7 @@ get_accounts_list (void) settings = modest_account_mgr_load_account_settings (account_mgr, account_name); if (!settings) { g_printerr ("modest: failed to get account data for %s\n", account_name); + cursor = cursor->next; continue; } store_settings = modest_account_settings_get_store_settings (settings); diff --git a/src/modest-account-mgr.c b/src/modest-account-mgr.c index 913d7d4..c3e12dc 100644 --- a/src/modest-account-mgr.c +++ b/src/modest-account-mgr.c @@ -768,9 +768,11 @@ modest_account_mgr_account_names (ModestAccountMgr * self, gboolean only_enabled /* Unescape the keys to get the account names: */ GSList *iter = accounts; while (iter) { - if (!(iter->data)) + if (!(iter->data)) { + iter = iter->next; continue; - + } + const gchar* account_name_key = (const gchar*)iter->data; gchar* unescaped_name = account_name_key ? modest_conf_key_unescape (account_name_key) @@ -1132,6 +1134,7 @@ modest_account_mgr_account_with_display_name_exists (ModestAccountMgr *self, ModestAccountSettings *settings = modest_account_mgr_load_account_settings (self, account_name); if (!settings) { g_printerr ("modest: failed to get account data for %s\n", account_name); + cursor = cursor->next; continue; } @@ -1210,6 +1213,7 @@ modest_account_mgr_check_already_configured_account (ModestAccountMgr *self, from_mgr_settings = modest_account_mgr_load_account_settings (self, account_name); if (!settings) { g_printerr ("modest: failed to get account data for %s\n", account_name); + cursor = cursor->next; continue; } diff --git a/src/modest-tny-folder.c b/src/modest-tny-folder.c index f01c61d..28012c3 100644 --- a/src/modest-tny-folder.c +++ b/src/modest-tny-folder.c @@ -432,6 +432,7 @@ modest_tny_folder_has_subfolder_with_name (TnyFolderStore *parent, folder = (TnyFolder*)tny_iterator_get_current (iter); if (!folder || ! TNY_IS_FOLDER(folder)) { g_warning ("%s: invalid folder", __FUNCTION__); + tny_iterator_next (iter); continue; } @@ -439,6 +440,7 @@ modest_tny_folder_has_subfolder_with_name (TnyFolderStore *parent, if (!name) { g_warning ("%s: folder name == NULL", __FUNCTION__); g_object_unref (folder); + tny_iterator_next (iter); continue; } diff --git a/src/modest-tny-msg.c b/src/modest-tny-msg.c index a249f7c..abdcf44 100644 --- a/src/modest-tny-msg.c +++ b/src/modest-tny-msg.c @@ -488,6 +488,7 @@ modest_tny_msg_find_body_part_from_mime_part (TnyMimePart *msg, gboolean want_ht if (!part) { g_warning ("%s: not a valid mime part", __FUNCTION__); + tny_iterator_next (iter); continue; } -- 1.7.9.5