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.
This commit is contained in:
Christophe Fergeau 2012-02-09 17:59:55 +01:00
parent b17b135d9f
commit 6d3b31a533

View File

@ -1504,12 +1504,16 @@ g_hash_table_foreach (GHashTable *hash_table,
{ {
gint i; gint i;
#ifndef G_DISABLE_ASSERT #ifndef G_DISABLE_ASSERT
gint version = hash_table->version; gint version;
#endif #endif
g_return_if_fail (hash_table != NULL); g_return_if_fail (hash_table != NULL);
g_return_if_fail (func != NULL); g_return_if_fail (func != NULL);
#ifndef G_DISABLE_ASSERT
version = hash_table->version;
#endif
for (i = 0; i < hash_table->size; i++) for (i = 0; i < hash_table->size; i++)
{ {
guint node_hash = hash_table->hashes[i]; guint node_hash = hash_table->hashes[i];
@ -1558,13 +1562,17 @@ g_hash_table_find (GHashTable *hash_table,
{ {
gint i; gint i;
#ifndef G_DISABLE_ASSERT #ifndef G_DISABLE_ASSERT
gint version = hash_table->version; gint version;
#endif #endif
gboolean match; gboolean match;
g_return_val_if_fail (hash_table != NULL, NULL); g_return_val_if_fail (hash_table != NULL, NULL);
g_return_val_if_fail (predicate != NULL, NULL); g_return_val_if_fail (predicate != NULL, NULL);
#ifndef G_DISABLE_ASSERT
version = hash_table->version;
#endif
match = FALSE; match = FALSE;
for (i = 0; i < hash_table->size; i++) for (i = 0; i < hash_table->size; i++)