2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-31 14:35:26 +00:00

2599. [bug] Address rapid memory growth when validation fails.

[RT #19654]
This commit is contained in:
Mark Andrews
2009-05-11 02:22:03 +00:00
parent 4bb70681e0
commit 4c2ed3d141
2 changed files with 47 additions and 44 deletions

View File

@@ -1,3 +1,6 @@
2599. [bug] Address rapid memory growth when validation fails.
[RT #19654]
2598. [func] Reserve the -F flag. [RT #19657]
2597. [bug] Handle a validation failure with a insecure delegation

View File

@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: resolver.c,v 1.395 2009/05/07 09:41:22 fdupont Exp $ */
/* $Id: resolver.c,v 1.396 2009/05/11 02:22:03 marka Exp $ */
/*! \file */
@@ -4224,53 +4224,53 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_adbaddrinfo_t *addrinfo,
rdataset->trust = dns_trust_pending;
if (sigrdataset != NULL)
sigrdataset->trust = dns_trust_pending;
if (!need_validation)
if (!need_validation || !ANSWER(rdataset)) {
addedrdataset = ardataset;
else
addedrdataset = NULL;
result = dns_db_addrdataset(fctx->cache, node, NULL,
now, rdataset, 0,
addedrdataset);
if (result == DNS_R_UNCHANGED) {
result = ISC_R_SUCCESS;
if (!need_validation &&
ardataset != NULL &&
ardataset->type == 0) {
/*
* The answer in the cache is better
* than the answer we found, and is
* a negative cache entry, so we
* must set eresult appropriately.
*/
if (NXDOMAIN(ardataset))
eresult = DNS_R_NCACHENXDOMAIN;
else
eresult = DNS_R_NCACHENXRRSET;
/*
* We have a negative response from
* the cache so don't attempt to
* add the RRSIG rrset.
*/
continue;
}
}
if (result != ISC_R_SUCCESS)
break;
if (sigrdataset != NULL) {
if (!need_validation)
addedrdataset = asigrdataset;
else
addedrdataset = NULL;
result = dns_db_addrdataset(fctx->cache,
node, NULL, now,
sigrdataset, 0,
addedrdataset);
if (result == DNS_R_UNCHANGED)
result = dns_db_addrdataset(fctx->cache, node,
NULL, now, rdataset,
0, addedrdataset);
if (result == DNS_R_UNCHANGED) {
result = ISC_R_SUCCESS;
if (!need_validation &&
ardataset != NULL &&
ardataset->type == 0) {
/*
* The answer in the cache isi
* better than the answer we
* found, and is a negative
* cache entry, so we must set
* eresult appropriately.
*/
if (NXDOMAIN(ardataset))
eresult =
DNS_R_NCACHENXDOMAIN;
else
eresult =
DNS_R_NCACHENXRRSET;
/*
* We have a negative response
* from the cache so don't
* attempt to add the RRSIG
* rrset.
*/
continue;
}
}
if (result != ISC_R_SUCCESS)
break;
} else if (!ANSWER(rdataset))
continue;
if (sigrdataset != NULL) {
addedrdataset = asigrdataset;
result = dns_db_addrdataset(fctx->cache,
node, NULL, now,
sigrdataset, 0,
addedrdataset);
if (result == DNS_R_UNCHANGED)
result = ISC_R_SUCCESS;
if (result != ISC_R_SUCCESS)
break;
} else if (!ANSWER(rdataset))
continue;
}
if (ANSWER(rdataset) && need_validation) {
if (fctx->type != dns_rdatatype_any &&