From f65c7b0c0275aa6d8f8dd93ff7ebf3406745f47d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Tue, 16 Sep 2025 14:11:08 +0200 Subject: [PATCH] Fix dns_qpmulti_memusage() on empty dns_qpmulti_t instance The dns_qpmulti_memusage() causes assertion failure when called on freshly created qpmulti instance because the qp->usage hasn't been allocated yet. (cherry picked from commit b2f653b3320939cd08e3669e3a618d3224149db7) --- lib/dns/qp.c | 2 +- tests/dns/qpmulti_test.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/dns/qp.c b/lib/dns/qp.c index 7156efc4fe..d4dbb60c10 100644 --- a/lib/dns/qp.c +++ b/lib/dns/qp.c @@ -1108,7 +1108,7 @@ dns_qpmulti_memusage(dns_qpmulti_t *multi) { dns_qp_memusage_t memusage = dns_qp_memusage(qp); - if (qp->transaction_mode == QP_UPDATE) { + if (qp->transaction_mode == QP_UPDATE && qp->usage != NULL) { memusage.bytes -= qp->usage[qp->bump].capacity; memusage.bytes += qp->usage[qp->bump].used * sizeof(dns_qpnode_t); diff --git a/tests/dns/qpmulti_test.c b/tests/dns/qpmulti_test.c index 849fdc1dcb..11ebe84355 100644 --- a/tests/dns/qpmulti_test.c +++ b/tests/dns/qpmulti_test.c @@ -394,8 +394,22 @@ ISC_RUN_TEST_IMPL(qpmulti) { isc_log_destroy(&dns_lctx); } +ISC_RUN_TEST_IMPL(qpmulti_memusage) { + dns_qpmulti_t *qpm = NULL; + dns_qp_memusage_t mu; + + dns_qpmulti_create(mctx, &test_methods, NULL, &qpm); + + mu = dns_qpmulti_memusage(qpm); + assert_int_equal(mu.leaves, 0); + assert_int_equal(mu.used, 0); + + dns_qpmulti_destroy(&qpm); +} + ISC_TEST_LIST_START ISC_TEST_ENTRY(qpmulti) +ISC_TEST_ENTRY(qpmulti_memusage) ISC_TEST_LIST_END ISC_TEST_MAIN