curl_xml: fix 3 small memory leaks
authorMarc Fournier <marc.fournier@camptocamp.com>
Tue, 12 May 2015 20:14:23 +0000 (22:14 +0200)
committerMarc Fournier <marc.fournier@camptocamp.com>
Tue, 19 May 2015 16:36:05 +0000 (18:36 +0200)
Discovered while testing the previous 2 commits. NB: valgrind
already complained about these before 0afea606 was applied, so this
isn't related to issue #935.

src/curl_xml.c

index 13f6680..e96bba3 100644 (file)
@@ -300,6 +300,7 @@ static int cx_handle_single_value_xpath (xmlXPathContextPtr xpath_ctx, /* {{{ */
 
   /* free up object */
   xmlXPathFreeObject (values_node_obj);
 
   /* free up object */
   xmlXPathFreeObject (values_node_obj);
+  sfree (node_value);
 
   /* We have reached here which means that
    * we have got something to work */
 
   /* We have reached here which means that
    * we have got something to work */
@@ -397,8 +398,12 @@ static int cx_handle_instance_xpath (xmlXPathContextPtr xpath_ctx, /* {{{ */
   if (xpath->instance_prefix != NULL)
   {
     if (instance_node != NULL)
   if (xpath->instance_prefix != NULL)
   {
     if (instance_node != NULL)
+    {
+      char *node_value = (char *) xmlNodeGetContent(instance_node->nodeTab[0]);
       ssnprintf (vl->type_instance, sizeof (vl->type_instance),"%s%s",
       ssnprintf (vl->type_instance, sizeof (vl->type_instance),"%s%s",
-          xpath->instance_prefix, (char *) xmlNodeGetContent(instance_node->nodeTab[0]));
+          xpath->instance_prefix, node_value);
+      sfree (node_value);
+    }
     else
       sstrncpy (vl->type_instance, xpath->instance_prefix,
           sizeof (vl->type_instance));
     else
       sstrncpy (vl->type_instance, xpath->instance_prefix,
           sizeof (vl->type_instance));
@@ -408,8 +413,11 @@ static int cx_handle_instance_xpath (xmlXPathContextPtr xpath_ctx, /* {{{ */
     /* If instance_prefix and instance_node are NULL, then
      * don't set the type_instance */
     if (instance_node != NULL)
     /* If instance_prefix and instance_node are NULL, then
      * don't set the type_instance */
     if (instance_node != NULL)
-      sstrncpy (vl->type_instance, (char *) xmlNodeGetContent(instance_node->nodeTab[0]),
-          sizeof (vl->type_instance));
+    {
+      char *node_value = (char *) xmlNodeGetContent(instance_node->nodeTab[0]);
+      sstrncpy (vl->type_instance, node_value, sizeof (vl->type_instance));
+      sfree (node_value);
+    }
   }
 
   /* Free `instance_node_obj' this late, because `instance_node' points to
   }
 
   /* Free `instance_node_obj' this late, because `instance_node' points to