]> xenbits.xensource.com Git - people/andrewcoop/hwloc.git/commitdiff
diff: fix memory leak when appending a "too complex" diff entry
authorBrice Goglin <Brice.Goglin@inria.fr>
Tue, 11 Feb 2014 21:27:13 +0000 (22:27 +0100)
committerBrice Goglin <Brice.Goglin@inria.fr>
Tue, 11 Feb 2014 21:27:13 +0000 (22:27 +0100)
Found by Coverity Scan.

src/diff.c

index e076118e8401ef944df06320d5411655b4839410..40cda64232a478511f366f6ce8b3ff1ead79adaa 100644 (file)
@@ -76,14 +76,15 @@ static int hwloc_append_diff_obj_attr_string(hwloc_obj_t obj,
                                             hwloc_topology_diff_t *lastdiffp)
 {
        hwloc_topology_diff_t newdiff;
-       newdiff = malloc(sizeof(*newdiff));
-       if (!newdiff)
-               return -1;
 
        if (obj->type == HWLOC_OBJ_MISC)
                /* TODO: add a custom level/depth for Misc */
                return hwloc_append_diff_too_complex(obj, firstdiffp, lastdiffp);
 
+       newdiff = malloc(sizeof(*newdiff));
+       if (!newdiff)
+               return -1;
+
        newdiff->obj_attr.type = HWLOC_TOPOLOGY_DIFF_OBJ_ATTR;
        newdiff->obj_attr.obj_depth = obj->depth;
        newdiff->obj_attr.obj_index = obj->logical_index;
@@ -104,14 +105,15 @@ static int hwloc_append_diff_obj_attr_uint64(hwloc_obj_t obj,
                                             hwloc_topology_diff_t *lastdiffp)
 {
        hwloc_topology_diff_t newdiff;
-       newdiff = malloc(sizeof(*newdiff));
-       if (!newdiff)
-               return -1;
 
        if (obj->type == HWLOC_OBJ_MISC)
                /* TODO: add a custom level/depth for Misc */
                return hwloc_append_diff_too_complex(obj, firstdiffp, lastdiffp);
 
+       newdiff = malloc(sizeof(*newdiff));
+       if (!newdiff)
+               return -1;
+
        newdiff->obj_attr.type = HWLOC_TOPOLOGY_DIFF_OBJ_ATTR;
        newdiff->obj_attr.obj_depth = obj->depth;
        newdiff->obj_attr.obj_index = obj->logical_index;