Re: bug in hashtable test



Miroslaw Dobrzanski-Neumann <mne mosaic-ag com> writes:

> in lines 295, 299 is key and value memory freed end possibly reused by the
> libc. the call to g_hash_table_lookup_extended() in line 288 afterwards uses
> the invalidated key value intenally.

Fixed. Thanks,
                                             Owen

Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/glib/ChangeLog,v
retrieving revision 1.1009
diff -u -p -r1.1009 ChangeLog
--- ChangeLog	2002/02/08 17:08:00	1.1009
+++ ChangeLog	2002/02/08 17:33:58
@@ -1,3 +1,9 @@
+Fri Feb  8 12:32:14 2002  Owen Taylor  <otaylor redhat com>
+
+	* tests/hash-test.c (second_hash_test): Fix access to
+	freed memory in test case (Miroslaw Dobrzanski-Neumann).
+	Re-enable and debug some commented out code.
+
 2002-02-08  Michael Natterer  <mitch gimp org>
 
 	* glib/gdir.c: g_dir_open: added g_return_val_if_fail() to prevent
Index: tests/hash-test.c
===================================================================
RCS file: /cvs/gnome/glib/tests/hash-test.c,v
retrieving revision 1.8
diff -u -p -r1.8 hash-test.c
--- tests/hash-test.c	2001/07/19 20:07:41	1.8
+++ tests/hash-test.c	2002/02/08 17:33:58
@@ -189,7 +189,6 @@ static void not_even_foreach (gpointer  
   g_assert (*_value != 0);
 
   i = atoi (_key);
-  g_assert (atoi (_key) > 0);
 
   sprintf (val, "%d value", i);
   g_assert (strcmp (_value, val) == 0);
@@ -214,7 +213,6 @@ static gboolean remove_even_foreach (gpo
   g_assert (*_value != 0);
 
   i = atoi (_key);
-  g_assert (i > 0);
 
   sprintf (val, "%d value", i);
   g_assert (strcmp (_value, val) == 0);
@@ -262,17 +260,15 @@ static void second_hash_test (gboolean s
 	  g_assert (atoi (v) == i);
           }
 
-     /**** future test stuff, yet to be debugged 
      sprintf (key, "%d", 3);
      g_hash_table_remove (h, key);
      g_hash_table_foreach_remove (h, remove_even_foreach, NULL);
      g_hash_table_foreach (h, not_even_foreach, NULL);
-     */
 
      for (i=0; i<20; i++)
           {
-	  if (((i % 2) == 0) || (i == 3))
-	    i++;
+	  if ((i % 2) == 0 || i == 3)
+  	      continue;
 
           sprintf (key, "%d", i);
 	  g_assert (atoi(key) == i);
@@ -285,6 +281,8 @@ static void second_hash_test (gboolean s
 	  					(gpointer)&orig_key,
 						(gpointer)&orig_val);
 	  g_assert (found);
+
+	  g_hash_table_remove (h, key);
 
 	  g_assert (orig_key != NULL);
 	  g_assert (strcmp (key, orig_key) == 0);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]