From 293618e427d6c0293679a174dec92ec7bde4b26f Mon Sep 17 00:00:00 2001 From: nick black Date: Mon, 15 Feb 2021 02:47:02 -0500 Subject: [PATCH] nctree_create(): free plane on all error paths #1164 --- src/lib/tree.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/lib/tree.c b/src/lib/tree.c index 0685c92c7..a593cf95e 100644 --- a/src/lib/tree.c +++ b/src/lib/tree.c @@ -98,22 +98,29 @@ nctree_inner_create(ncplane* n, const struct nctree_options* opts){ return ret; } -// FIXME free up |n| on all error paths nctree* nctree_create(ncplane* n, const struct nctree_options* opts){ notcurses* nc = ncplane_notcurses(n); if(opts->flags){ logwarn(nc, "Passed invalid flags 0x%016jx\n", (uint64_t)opts->flags); - return NULL; + goto error; } if(opts->count == 0 || opts->items == NULL){ logerror(nc, "Can't create empty tree\n"); - return NULL; + goto error; } if(opts->nctreecb == NULL){ logerror(nc, "Can't use NULL callback\n"); - return NULL; + goto error; } - return nctree_inner_create(n, opts); + nctree* ret = nctree_inner_create(n, opts); + if(ret == NULL){ + goto error; + } + return ret; + +error: + ncplane_destroy(n); + return NULL; } void nctree_destroy(nctree* n){