From: Klaus Ethgen Date: Mon, 15 Feb 2016 21:09:52 +0000 (+0100) Subject: Fix nasty double free crashes X-Git-Tag: v1.2.3~2 X-Git-Url: http://geeqie.org/cgi-bin/gitweb.cgi?p=geeqie.git;a=commitdiff_plain;h=c4114f7d7b6baa193ba4fbeb8693becfcd256943 Fix nasty double free crashes Old GTK+ versions seemed to be robust about this double free so we seen that crashes or 100% CPU usages just with modern versions. This patch takes care of it on two places: 1. Hashes will not be freed by g_hash_table_destroy when empty 2. NULLify the enty variable after free --- diff --git a/src/collect-io.c b/src/collect-io.c index 1f6cf050..bb9967d4 100644 --- a/src/collect-io.c +++ b/src/collect-io.c @@ -497,8 +497,14 @@ static void collect_manager_entry_free_data(CollectManagerEntry *entry) collect_manager_action_unref(action); } g_list_free(entry->add_list); - g_hash_table_destroy(entry->oldpath_hash); - g_hash_table_destroy(entry->newpath_hash); + if (g_hash_table_size(entry->oldpath_hash) > 0) + g_hash_table_destroy(entry->oldpath_hash); + else + g_hash_table_unref(entry->oldpath_hash); + if (g_hash_table_size(entry->newpath_hash) > 0) + g_hash_table_destroy(entry->newpath_hash); + else + g_hash_table_unref(entry->newpath_hash); } static void collect_manager_entry_init_data(CollectManagerEntry *entry) @@ -704,6 +710,8 @@ static void collect_manager_refresh(void) else { collect_manager_entry_free(entry); + + entry = NULL; } } }