talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit e377eee114ead1ecafd829a5937869e9bead2584
parent 76c91d8cceb7bdcdf8ede508fc1e1b349dcf930a
Author: Paul <paul@claws-mail.org>
Date:   Wed, 28 Aug 2013 06:27:58 +0100

fix bug 2989, 'Segfault at startup because of corrupted folderlist.xml'

Diffstat:
Msrc/file_checker.c | 32+++++++++++++++++++++++++++-----
Msrc/folder.c | 2++
2 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/src/file_checker.c b/src/file_checker.c @@ -41,14 +41,16 @@ static gboolean verify_folderlist_xml(); -gboolean check_file_integrity() { +gboolean check_file_integrity() +{ if (verify_folderlist_xml() != TRUE) return FALSE; return TRUE; } -static gboolean verify_folderlist_xml() { +static gboolean verify_folderlist_xml() +{ GNode *node; static gchar *filename = NULL; static gchar *bak = NULL; @@ -85,8 +87,8 @@ static gboolean verify_folderlist_xml() { g_free(bak); return TRUE; } - } + node = xml_parse_file(filename); if (!node && is_file_exist(bak)) { AlertValue aval; @@ -104,9 +106,29 @@ static gboolean verify_folderlist_xml() { alertpanel_warning(_("Could not copy %s to %s"),bak,filename); return FALSE; } - g_free(bak); + g_free(bak); } } + + if (is_file_exist(filename) && is_file_exist(bak) && folder_read_list() < 0) { + AlertValue aval; + gchar *msg; - return TRUE; + msg = g_strdup_printf + (_("The file %s is corrupted! " + "Do you want to use the backup file from %s?"), FOLDER_LIST,buf); + aval = alertpanel(_("Warning"), msg, GTK_STOCK_NO, GTK_STOCK_YES, NULL); + g_free(msg); + if (aval != G_ALERTALTERNATE) + return FALSE; + else { + if (copy_file(bak,filename,FALSE) < 0) { + alertpanel_warning(_("Could not copy %s to %s"),bak,filename); + return FALSE; + } + g_free(bak); + } + } + + return TRUE; } diff --git a/src/folder.c b/src/folder.c @@ -4068,6 +4068,8 @@ static gpointer xml_to_folder_item(gpointer nodedata, gpointer data) static gboolean folder_item_set_node(GNode *node, gpointer data) { + cm_return_val_if_fail(node->data != NULL, -1); + FolderItem *item = (FolderItem *) node->data; item->node = node;