From eb52c305242523867cc49fcc1b7cf4a7696cd095 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Fri, 26 May 2023 11:09:33 +1000 Subject: [PATCH] Add regression test for [GL # 4090] 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. (cherry picked from commit 03ebe96110c4ec09563d3f4d6bda853e6f5ed88b) --- tests/isc/radix_test.c | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tests/isc/radix_test.c b/tests/isc/radix_test.c index 1e03e52f2d..fe589fe2b7 100644 --- a/tests/isc/radix_test.c +++ b/tests/isc/radix_test.c @@ -30,6 +30,55 @@ #include +/* 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