diff options
author | Sander Vrijders <[email protected]> | 2017-08-29 13:14:25 +0200 |
---|---|---|
committer | Sander Vrijders <[email protected]> | 2017-08-29 13:14:25 +0200 |
commit | 4de841c26b7208d5395da349ea16c937b1361414 (patch) | |
tree | d86a1c02b36cfc5feea1ba5f22c6899f8a6c0c9c /src/lib/btree.c | |
parent | e8875c08ac04a1d9aca342d94d4f788239334f72 (diff) | |
download | ouroboros-4de841c26b7208d5395da349ea16c937b1361414.tar.gz ouroboros-4de841c26b7208d5395da349ea16c937b1361414.zip |
lib, ipcpd, irmd: Fix bugs reported by static analysis
This fixes several bugs as reported by the clang static analyzer.
Diffstat (limited to 'src/lib/btree.c')
-rw-r--r-- | src/lib/btree.c | 10 |
1 files changed, 8 insertions, 2 deletions
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; |