Index: glib/tests/strtod-test.c
===================================================================
RCS file: /cvs/gnome/glib/tests/strtod-test.c,v
retrieving revision 1.2
diff -u -r1.2 strtod-test.c
--- glib/tests/strtod-test.c	4 Jul 2002 15:19:30 -0000	1.2
+++ glib/tests/strtod-test.c	25 Nov 2003 12:48:37 -0000
@@ -11,18 +11,32 @@
 {
   gdouble d;
   char *locales[] = {"sv_SE", "en_US", "fa_IR", "C"};
-  int l;
+  int l, round;
   char *end;
-
-  for (l = 0; l < G_N_ELEMENTS (locales); l++)
+  
+  for (round = 0; round < 2; round++)
     {
-      setlocale (LC_NUMERIC, locales[l]);
-      d = g_ascii_strtod (number, &end);
-      if (d != res)
-	g_print ("g_ascii_strtod for locale %s failed\n", locales[l]);
-      if (*end != 0)
-	g_print ("g_ascii_strtod for locale %s endptr was wrong\n", locales[l]);
+      char *dummy;
+
+      for (l = 0; l < G_N_ELEMENTS (locales); l++)
+	{
+	  setlocale (LC_ALL, locales[l]);
+	  d = g_ascii_strtod (number, &end);
+	  if (d != res)
+	    g_print ("g_ascii_strtod for locale %s failed\n", locales[l]);
+	  if (end - number != strlen(number))
+	    g_print ("g_ascii_strtod for locale %s endptr was wrong\n", locales[l]);
+	}
+
+      /* in second run, we try with a copy of number, with some free space for
+       * malloc before that.  This is supposed to smash the some wrong pointer
+       * calculations. */
+      dummy = g_malloc(100000);
+      number = g_strdup(pnumber);
+      g_free(dummy);
     }
+
+  g_free(number);
 }
 
 
