]> 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 02:07:47 +0000 (02:07 +0000)
committerMark Andrews <marka@isc.org>
Wed, 2 Nov 2005 02:07:47 +0000 (02:07 +0000)
CHANGES
lib/dns/validator.c

diff --git a/CHANGES b/CHANGES
index fe7638c566c52867458d62eb82a0c7a09ba13661..8efb38b3abcdb16b8a2c932a40d1ca11a5cc6497 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+1936.  [bug]           The validator could leak memory. [RT #15544]
+
 1932.  [bug]           hpux: LDFLAGS was getting corrupted. [RT #15530]
 
        --- 9.3.2b2 released ---
index 17b5bcc583a58e446bd082fd335b59c2c7306b4c..a62db3413768fb5adac72312778140d84386e730 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: validator.c,v 1.91.2.5.8.20 2005/10/14 01:38:49 marka Exp $ */
+/* $Id: validator.c,v 1.91.2.5.8.21 2005/11/02 02:07:47 marka Exp $ */
 
 #include <config.h>
 
@@ -226,6 +226,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);
 
@@ -278,6 +285,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);
 
@@ -334,6 +348,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);
@@ -2023,6 +2044,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);
 
@@ -2657,6 +2685,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));