From 6d3b31a533d74b727bca5ac720a81eacb8aee31e Mon Sep 17 00:00:00 2001 From: Christophe Fergeau Date: Thu, 9 Feb 2012 17:59:55 +0100 Subject: [PATCH] Fix g_hash_table_foreach crash with NULL hash table When G_DISABLE_ASSERT is not defined, g_hash_table_foreach and g_hash_table_find dereferences the hash table argument before checking if it's NULL. This causes a crash when one of this function is mistakenly called with a NULL argument instead of returning with a warning through g_return_if_fail. --- glib/ghash.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/glib/ghash.c b/glib/ghash.c index b058d171d..e204a40ad 100644 --- a/glib/ghash.c +++ b/glib/ghash.c @@ -1504,12 +1504,16 @@ g_hash_table_foreach (GHashTable *hash_table, { gint i; #ifndef G_DISABLE_ASSERT - gint version = hash_table->version; + gint version; #endif g_return_if_fail (hash_table != NULL); g_return_if_fail (func != NULL); +#ifndef G_DISABLE_ASSERT + version = hash_table->version; +#endif + for (i = 0; i < hash_table->size; i++) { guint node_hash = hash_table->hashes[i]; @@ -1558,13 +1562,17 @@ g_hash_table_find (GHashTable *hash_table, { gint i; #ifndef G_DISABLE_ASSERT - gint version = hash_table->version; + gint version; #endif gboolean match; g_return_val_if_fail (hash_table != NULL, NULL); g_return_val_if_fail (predicate != NULL, NULL); +#ifndef G_DISABLE_ASSERT + version = hash_table->version; +#endif + match = FALSE; for (i = 0; i < hash_table->size; i++)