dup the new value before freeing the old, just in case. (#172142, Morten
authorMatthias Clasen <mclasen@redhat.com>
Fri, 20 May 2005 20:51:38 +0000 (20:51 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Fri, 20 May 2005 20:51:38 +0000 (20:51 +0000)
2005-05-20  Matthias Clasen  <mclasen@redhat.com>

* gvaluetypes.c (g_value_set_string): dup the new value
before freeing the old, just in case.  (#172142, Morten
Welinder)

gobject/ChangeLog
gobject/gvaluetypes.c

index 336408b..3a6cb5c 100644 (file)
@@ -1,3 +1,9 @@
+2005-05-20  Matthias Clasen  <mclasen@redhat.com>
+
+       * gvaluetypes.c (g_value_set_string): dup the new value
+       before freeing the old, just in case.  (#172142, Morten
+       Welinder)
+
 2005-05-13  Matthias Clasen  <mclasen@redhat.com>
 
        * glib-genmarshal.1: Mention 64bit integer types.
index 48d332a..b5380ee 100644 (file)
@@ -739,13 +739,18 @@ void
 g_value_set_string (GValue     *value,
                    const gchar *v_string)
 {
+  gchar *new_val;
+
   g_return_if_fail (G_VALUE_HOLDS_STRING (value));
-  
+
+  new_val = g_strdup (v_string);
+
   if (value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS)
     value->data[1].v_uint = 0;
   else
     g_free (value->data[0].v_pointer);
-  value->data[0].v_pointer = g_strdup (v_string);
+
+  value->data[0].v_pointer = new_val;
 }
 
 void