]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1936. [bug] The validator could leak memory. [RT #15544]
authorMark Andrews <marka@isc.org>
Wed, 2 Nov 2005 01:53:25 +0000 (01:53 +0000)
committerMark Andrews <marka@isc.org>
Wed, 2 Nov 2005 01:53:25 +0000 (01:53 +0000)
CHANGES
lib/dns/validator.c

diff --git a/CHANGES b/CHANGES
index 1405612f9e5f7c87efa7ce71b5b0248269d08114..54a499f2f8a25b4a2df4dd973e54a860aa3bf873 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+1936.  [bug]           The validator could leak memory. [RT #15544]
+
 1935.  [bug]           'acache' was DO sensitive. [RT #15430]
 
 1934.  [func]          Validate pending NS RRsets, in the authority section,
index e0bb0dc63cede5d0235e2c1ead86a802f95ba50a..1193c053879db02e88c33d8f65c5346573733e44 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: validator.c,v 1.119.18.14 2005/10/14 01:28:28 marka Exp $ */
+/* $Id: validator.c,v 1.119.18.15 2005/11/02 01:53:25 marka Exp $ */
 
 /*! \file */
 
@@ -228,6 +228,13 @@ fetch_callback_validator(isc_task_t *task, isc_event_t *event) {
        rdataset = &val->frdataset;
        eresult = devent->result;
 
+       /* Free resources which are not of interest. */
+       if (devent->node != NULL)
+               dns_db_detachnode(devent->db, &devent->node);
+       if (devent->db != NULL)
+               dns_db_detach(&devent->db);
+       if (dns_rdataset_isassociated(&val->fsigrdataset))
+               dns_rdataset_disassociate(&val->fsigrdataset);
        isc_event_free(&event);
        dns_resolver_destroyfetch(&val->fetch);
 
@@ -280,6 +287,13 @@ dsfetched(isc_task_t *task, isc_event_t *event) {
        rdataset = &val->frdataset;
        eresult = devent->result;
 
+       /* Free resources which are not of interest. */
+       if (devent->node != NULL)
+               dns_db_detachnode(devent->db, &devent->node);
+       if (devent->db != NULL)
+               dns_db_detach(&devent->db);
+       if (dns_rdataset_isassociated(&val->fsigrdataset))
+               dns_rdataset_disassociate(&val->fsigrdataset);
        isc_event_free(&event);
        dns_resolver_destroyfetch(&val->fetch);
 
@@ -336,6 +350,13 @@ dsfetched2(isc_task_t *task, isc_event_t *event) {
        val = devent->ev_arg;
        eresult = devent->result;
 
+       /* Free resources which are not of interest. */
+       if (devent->node != NULL)
+               dns_db_detachnode(devent->db, &devent->node);
+       if (devent->db != NULL)
+               dns_db_detach(&devent->db);
+       if (dns_rdataset_isassociated(&val->fsigrdataset))
+               dns_rdataset_disassociate(&val->fsigrdataset);
        dns_resolver_destroyfetch(&val->fetch);
 
        INSIST(val->event != NULL);
@@ -2030,6 +2051,13 @@ dlvfetched(isc_task_t *task, isc_event_t *event) {
        val = devent->ev_arg;
        eresult = devent->result;
 
+       /* Free resources which are not of interest. */
+       if (devent->node != NULL)
+               dns_db_detachnode(devent->db, &devent->node);
+       if (devent->db != NULL)
+               dns_db_detach(&devent->db);
+       if (dns_rdataset_isassociated(&val->fsigrdataset))
+               dns_rdataset_disassociate(&val->fsigrdataset);
        isc_event_free(&event);
        dns_resolver_destroyfetch(&val->fetch);
 
@@ -2664,6 +2692,10 @@ destroy(dns_validator_t *val) {
                dns_validator_destroy(&val->subvalidator);
        if (val->havedlvsep)
                dns_rdataset_disassociate(&val->dlv);
+       if (dns_rdataset_isassociated(&val->frdataset))
+               dns_rdataset_disassociate(&val->frdataset);
+       if (dns_rdataset_isassociated(&val->fsigrdataset))
+               dns_rdataset_disassociate(&val->fsigrdataset);
        mctx = val->view->mctx;
        if (val->siginfo != NULL)
                isc_mem_put(mctx, val->siginfo, sizeof(*val->siginfo));