From 0485fcadd3b00abe48839156205acb2c6f70f424 Mon Sep 17 00:00:00 2001 From: Bob Halley Date: Sat, 12 Feb 2000 02:19:20 +0000 Subject: [PATCH] dns_view_simplefind() no longer binds the rdatasets if the result is NXDOMAIN. --- lib/dns/view.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/dns/view.c b/lib/dns/view.c index 3e7b0096f6..f611a0a6ac 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -609,14 +609,24 @@ dns_view_simplefind(dns_view_t *view, dns_name_t *name, dns_rdatatype_t type, result = dns_view_find(view, name, type, now, options, use_hints, dns_fixedname_name(&foundname), rdataset, sigrdataset); - if (result != ISC_R_SUCCESS && - result != DNS_R_GLUE && - result != DNS_R_HINT && - result != DNS_R_NCACHENXDOMAIN && - result != DNS_R_NCACHENXRRSET && - result != DNS_R_NXDOMAIN && - result != DNS_R_NXRRSET && - result != DNS_R_NOTFOUND) { + if (result == DNS_R_NXDOMAIN) { + /* + * The rdataset and sigrdataset of the relevant NXT record + * may be returned, but the caller cannot use them because + * foundname is not returned by this simplified API. We + * disassociate them here to prevent any misuse by the caller. + */ + if (rdataset->methods != NULL) + dns_rdataset_disassociate(rdataset); + if (sigrdataset != NULL && sigrdataset->methods != NULL) + dns_rdataset_disassociate(sigrdataset); + } else if (result != ISC_R_SUCCESS && + result != DNS_R_GLUE && + result != DNS_R_HINT && + result != DNS_R_NCACHENXDOMAIN && + result != DNS_R_NCACHENXRRSET && + result != DNS_R_NXRRSET && + result != DNS_R_NOTFOUND) { if (rdataset->methods != NULL) dns_rdataset_disassociate(rdataset); if (sigrdataset != NULL && sigrdataset->methods != NULL)