]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add regression test for [GL # 4090]
authorMark Andrews <marka@isc.org>
Fri, 26 May 2023 01:09:33 +0000 (11:09 +1000)
committerMark Andrews <marka@isc.org>
Mon, 29 May 2023 01:40:57 +0000 (01:40 +0000)
These insertions are added to produce a radix tree that will trigger
the INSIST reported in [GL #4090].  Due to fixes added since BIND 9.9
an extra insert in needed to ensure node->parent is non NULL.

tests/isc/radix_test.c

index 1e03e52f2df755b7b71005c719d730856ae79609..fe589fe2b7fd728261dc780cd8f1d9f06968301c 100644 (file)
 
 #include <tests/isc.h>
 
+/* test radix node removal */
+ISC_RUN_TEST_IMPL(isc_radix_remove) {
+       isc_radix_tree_t *radix = NULL;
+       isc_radix_node_t *node;
+       isc_prefix_t prefix;
+       isc_result_t result;
+       struct in_addr in_addr;
+       isc_netaddr_t netaddr;
+
+       UNUSED(state);
+
+       result = isc_radix_create(mctx, &radix, 32);
+       assert_int_equal(result, ISC_R_SUCCESS);
+
+       in_addr.s_addr = inet_addr("1.1.1.1");
+       isc_netaddr_fromin(&netaddr, &in_addr);
+       NETADDR_TO_PREFIX_T(&netaddr, prefix, 32);
+
+       node = NULL;
+       result = isc_radix_insert(radix, &node, NULL, &prefix);
+       assert_int_equal(result, ISC_R_SUCCESS);
+       node->data[0] = (void *)32;
+       isc_refcount_destroy(&prefix.refcount);
+
+       in_addr.s_addr = inet_addr("1.0.0.0");
+       isc_netaddr_fromin(&netaddr, &in_addr);
+       NETADDR_TO_PREFIX_T(&netaddr, prefix, 8);
+
+       node = NULL;
+       result = isc_radix_insert(radix, &node, NULL, &prefix);
+       assert_int_equal(result, ISC_R_SUCCESS);
+       node->data[0] = (void *)8;
+       isc_refcount_destroy(&prefix.refcount);
+
+       in_addr.s_addr = inet_addr("1.1.1.0");
+       isc_netaddr_fromin(&netaddr, &in_addr);
+       NETADDR_TO_PREFIX_T(&netaddr, prefix, 24);
+
+       node = NULL;
+       result = isc_radix_insert(radix, &node, NULL, &prefix);
+       assert_int_equal(result, ISC_R_SUCCESS);
+       node->data[0] = (void *)24;
+       isc_refcount_destroy(&prefix.refcount);
+
+       isc_radix_remove(radix, node);
+
+       isc_radix_destroy(radix, NULL);
+}
+
 /* test radix searching */
 ISC_RUN_TEST_IMPL(isc_radix_search) {
        isc_radix_tree_t *radix = NULL;
@@ -80,6 +129,7 @@ ISC_RUN_TEST_IMPL(isc_radix_search) {
 
 ISC_TEST_LIST_START
 
+ISC_TEST_ENTRY(isc_radix_remove)
 ISC_TEST_ENTRY(isc_radix_search)
 
 ISC_TEST_LIST_END