base: Fix CID 1518898 Resource leak
authorLuke Howard <lukeh@padl.com>
Wed, 4 Jan 2023 07:14:28 +0000 (18:14 +1100)
committerNicolas Williams <nico@twosigma.com>
Wed, 4 Jan 2023 07:36:03 +0000 (01:36 -0600)
Don't leak new_node if invalid node type in heim_path_vcreate()

lib/base/heimbase.c

index 67a8308a15ce6fc4ea3edb3f168a44ee81dd59e3..f3bef7546825a9ceaa572a93eac5b333706ca3ec 100644 (file)
@@ -967,16 +967,12 @@ heim_path_vcreate(heim_object_t ptr, size_t size, heim_object_t leaf,
 
            if (node_type == HEIM_TID_DICT) {
                ret = heim_dict_set_value(node, path_element, new_node);
-               heim_release(new_node);
-
                next_node = heim_dict_get_value(node, path_element);
            } else if (node_type == HEIM_TID_ARRAY &&
                heim_number_get_int(path_element) <= heim_array_get_length(node)) {
                ret = heim_array_insert_value(node,
                                              heim_number_get_int(path_element),
                                              new_node);
-               heim_release(new_node);
-
                next_node = heim_array_get_value(node, idx);
            } else {
                ret = EINVAL;
@@ -984,6 +980,8 @@ heim_path_vcreate(heim_object_t ptr, size_t size, heim_object_t leaf,
                    *error = heim_error_create(ret, "Node in path not a "
                                               "container");
            }
+
+           heim_release(new_node);
            if (ret)
                goto err;
        }