]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Dissassociate rdatasets returned from dns_ncache_current
authorMark Andrews <marka@isc.org>
Mon, 15 Jan 2024 02:39:44 +0000 (13:39 +1100)
committerMark Andrews <marka@isc.org>
Tue, 13 Feb 2024 11:42:56 +0000 (11:42 +0000)
lib/dns/validator.c:findnsec3proofs failed to disassociate the
temporary rdataset returned by dns_ncache_current on all paths.

lib/dns/validator.c

index b679392c49ef838f739549e5abd20e55f7ad1e9f..c6978127554c8ebd4d32bc9d6a8f6853bc6fd5a5 100644 (file)
@@ -2116,6 +2116,9 @@ findnsec3proofs(dns_validator_t *val) {
        POST(result);
 
        if (dns_name_countlabels(zonename) == 0) {
+               if (dns_rdataset_isassociated(&trdataset)) {
+                       dns_rdataset_disassociate(&trdataset);
+               }
                return (ISC_R_SUCCESS);
        }
 
@@ -2184,6 +2187,9 @@ findnsec3proofs(dns_validator_t *val) {
                        {
                                proofs[DNS_VALIDATOR_NOWILDCARDPROOF] = name;
                        }
+                       if (dns_rdataset_isassociated(&trdataset)) {
+                               dns_rdataset_disassociate(&trdataset);
+                       }
                        return (result);
                }
                if (result != ISC_R_SUCCESS) {
@@ -2237,9 +2243,15 @@ findnsec3proofs(dns_validator_t *val) {
        {
                result = checkwildcard(val, dns_rdatatype_nsec3, zonename);
                if (result != ISC_R_SUCCESS) {
+                       if (dns_rdataset_isassociated(&trdataset)) {
+                               dns_rdataset_disassociate(&trdataset);
+                       }
                        return (result);
                }
        }
+       if (dns_rdataset_isassociated(&trdataset)) {
+               dns_rdataset_disassociate(&trdataset);
+       }
        return (result);
 }