]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
zone-tree: bugfix: iteration across non-existing subtree ret=1
authorLibor Peltan <libor.peltan@nic.cz>
Fri, 5 Dec 2025 09:13:30 +0000 (10:13 +0100)
committerDaniel Salzman <daniel.salzman@nic.cz>
Sun, 7 Dec 2025 20:35:17 +0000 (21:35 +0100)
src/knot/zone/zone-tree.c
tests/knot/test_zone-tree.c

index d933238af7326112946971e6bb85a940da3d3127..760a7cd3e1de338be9244a45ff20995e56c89308 100644 (file)
@@ -354,6 +354,9 @@ int zone_tree_it_sub_begin(zone_tree_t *tree, const knot_dname_t *sub_root,
        knot_dname_storage_t lf_storage;
        uint8_t *lf = knot_dname_lf(sub_root, lf_storage);
        ret = trie_it_get_leq(it->it, lf + 1, *lf);
+       if (ret == 1) {
+               ret = KNOT_ENOENT;
+       }
        if ((ret != KNOT_EOK && ret != KNOT_ENOENT) || it->sub_root == NULL) {
                zone_tree_it_free(it);
                return ret == KNOT_EOK ? KNOT_ENOMEM : ret;
index 193fad290343597fb15ed78b9ed52c52434256f5..e89892268441d4095b9f47943e67dbef411cd143 100644 (file)
@@ -116,6 +116,8 @@ int main(int argc, char *argv[])
 
        /* 6. subtree apply */
        int counter = 0;
+       ret = zone_tree_sub_apply(t, (const knot_dname_t *)"\x02""bc", false, ztree_node_counter, &counter);
+       ok(ret == KNOT_EOK && counter == 0, "ztree: non-existing subtree");
        ret = zone_tree_sub_apply(t, (const knot_dname_t *)"\x02""ac", false, ztree_node_counter, &counter);
        ok(ret == KNOT_EOK && counter == 2, "ztree: subtree iteration");
        counter = 0;