]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Fix dns_qpmulti_memusage() on empty dns_qpmulti_t instance
authorOndřej Surý <ondrej@isc.org>
Tue, 16 Sep 2025 12:11:08 +0000 (14:11 +0200)
committerOndřej Surý <ondrej@isc.org>
Wed, 17 Sep 2025 12:01:44 +0000 (14:01 +0200)
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
tests/dns/qpmulti_test.c

index 7156efc4fe953a5be5bd4c195e717932c3307153..d4dbb60c10d0f79bfbe77e16e333236409fc2b54 100644 (file)
@@ -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);
index 849fdc1dcb28f26e40964c239fdf8c7945d03a5a..11ebe843558200b8d58a9e7c2e535254f5e78626 100644 (file)
@@ -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