nctree: fix memory leak on error path

pull/1351/head
nick black 4 years ago committed by Nick Black
parent 41d056b8d6
commit cf367289c8

@ -14,6 +14,14 @@ typedef struct nctree {
uint64_t bchannels;
} nctree;
static void
free_tree_items(nctree_int_item* iarray){
for(unsigned c = 0 ; c < iarray->subcount ; ++c){
free_tree_items(&iarray->subs[c]);
}
free(iarray->subs);
}
static nctree_int_item*
dup_tree_items(const nctree_item* items, unsigned count){
nctree_int_item* ret = malloc(sizeof(*ret) * count);
@ -24,6 +32,9 @@ dup_tree_items(const nctree_item* items, unsigned count){
nii->n = NULL;
nii->subcount = items[c].subcount;
if((nii->subs = dup_tree_items(items[c].subs, nii->subcount)) == NULL){
while(c--){
free_tree_items(&ret[c]);
}
free(ret);
return NULL;
}
@ -66,14 +77,6 @@ nctree* nctree_create(ncplane* n, const struct nctree_options* opts){
return nctree_inner_create(n, opts);
}
static void
free_tree_items(nctree_int_item* iarray){
for(unsigned c = 0 ; c < iarray->subcount ; ++c){
free_tree_items(&iarray->subs[c]);
}
free(iarray->subs);
}
void nctree_destroy(nctree* n){
if(n){
for(unsigned c = 0 ; c < n->itemcount ; ++c){

Loading…
Cancel
Save