Fix potential null-deref in r_rbtree_cont_foreach() ##rizin

This commit is contained in:
Florian Maerkl 2021-01-19 03:24:31 +01:00 committed by pancake
parent 0b607b38e0
commit 0967e24b40
2 changed files with 13 additions and 2 deletions

View File

@ -113,10 +113,10 @@ R_API void *r_rbtree_cont_find(RContRBTree *tree, void *data, RContRBCmp cmp, vo
R_API void *r_rbtree_cont_first(RContRBTree *tree);
#define r_rbtree_cont_foreach(tree, it, dat) \
for ((it) = r_rbtree_first (&tree->root->node); r_rbtree_iter_has(&it) && (dat = r_rbtree_iter_get (&it, RContRBNode, node)->data); r_rbtree_iter_next (&(it)))
for ((it) = r_rbtree_first ((tree)->root ? &(tree)->root->node : NULL); r_rbtree_iter_has(&it) && (dat = r_rbtree_iter_get (&it, RContRBNode, node)->data); r_rbtree_iter_next (&(it)))
#define r_rbtree_cont_foreach_prev(tree, it, dat) \
for ((it) = r_rbtree_last (&tree->root->node); r_rbtree_iter_has(&it) && (dat = r_rbtree_iter_get (&it, RContRBNode, node)->data); r_rbtree_iter_prev (&(it)))
for ((it) = r_rbtree_last ((tree)->root ? &(tree)->root->node : NULL); r_rbtree_iter_has(&it) && (dat = r_rbtree_iter_get (&it, RContRBNode, node)->data); r_rbtree_iter_prev (&(it)))
R_API void r_rbtree_cont_free(RContRBTree *tree);

View File

@ -7,6 +7,17 @@ static int simple_cmp(void *incoming, void *in, void *user) {
return v[0] - v[1];
}
bool test_r_rbtree_cont_foreach_empty() {
RContRBTree *tree = r_rbtree_cont_new ();
RBIter alf;
void *v;
r_rbtree_cont_foreach (tree, alf, v) {
mu_assert ("not reachable", false);
}
r_rbtree_cont_free (tree);
mu_end;
}
bool test_r_rbtree_cont_insert() {
RContRBTree *tree = r_rbtree_cont_new ();
ut32 i;