From 4de841c26b7208d5395da349ea16c937b1361414 Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Tue, 29 Aug 2017 13:14:25 +0200 Subject: lib, ipcpd, irmd: Fix bugs reported by static analysis This fixes several bugs as reported by the clang static analyzer. --- src/lib/btree.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/lib/btree.c') diff --git a/src/lib/btree.c b/src/lib/btree.c index 8be8b99f..beba90f7 100644 --- a/src/lib/btree.c +++ b/src/lib/btree.c @@ -85,6 +85,8 @@ static struct btnode * btnode_create(size_t k) if (node == NULL) return NULL; + assert(k > 0); + node->keyvals = malloc(sizeof(*node->keyvals) * k); if (node->keyvals == NULL) { free(node); @@ -368,8 +370,10 @@ struct btree * btree_create(size_t k) if (tree == NULL) return NULL; - if (k > BTREE_MAX_ORDER) + if (k < 1 || k > BTREE_MAX_ORDER) { + free(tree); return NULL; + } tree->k = k; tree->root = NULL; @@ -413,8 +417,10 @@ int btree_insert(struct btree * tree, if (rgt != NULL) { struct btnode * lft = btnode_create(tree->root->k); - if (lft == NULL) + if (lft == NULL) { + free(rgt); return -ENOMEM; + } lft->used = tree->root->used; lft->leaf = tree->root->leaf; -- cgit v1.2.3