Set alternative content to NULL after free.
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Mon, 9 Feb 2009 02:01:44 +0000 (00:01 -0200)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Mon, 9 Feb 2009 02:01:44 +0000 (00:01 -0200)
When setting the content using a type different from the original (src
content instead of text content, for example), set the old content to
NULL after releasing its memory. Otherwise, we try to free them when
releasing the content object or setting the content again.

atom/content.c

index 8dfbdd0..47fd693 100644 (file)
@@ -139,9 +139,15 @@ atom_content_src_set (AtomContent *content, char *src)
   if (content->src)
     g_free (content->src);
   if (content->content)
-    g_free (content->content);
+    {
+      g_free (content->content);
+      content->content = NULL;
+    }
   if (content->xmlcontent)
-    xmlFreeNode (content->xmlcontent);
+    {
+      xmlFreeNode (content->xmlcontent);
+      content->xmlcontent = NULL;
+    }
   content->src = g_strdup (src);
 }
 
@@ -173,9 +179,15 @@ atom_content_content_set (AtomContent *content, char *buffer, size_t len)
   if (content->content)
     g_free (content->content);
   if (content->src)
-    g_free (content->src);
+    {
+      g_free (content->src);
+      content->src = NULL;
+    }
   if (content->xmlcontent)
-    xmlFreeNode (content->xmlcontent);
+    {
+      xmlFreeNode (content->xmlcontent);
+      content->xmlcontent = NULL;
+    }
   content->content = g_malloc (len);
   memcpy (content->content, buffer, len);
 }
@@ -246,8 +258,14 @@ atom_content_content_set_xmlnode (AtomContent *content, xmlNodePtr node)
   if (content->xmlcontent)
     xmlFreeNode (content->xmlcontent);
   if (content->content)
-    g_free (content->content);
+    {
+      g_free (content->content);
+      content->content = NULL;
+    }
   if (content->src)
-    g_free (content->src);
+    {
+      g_free (content->src);
+      content->src = NULL;
+    }
   content->xmlcontent = xmlCopyNodeList (node);
 }