Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 19ff2ba4e9513c692f03f152b5fcb7f0 > files > 41

bind-9.3.6-25.P1.el5_11.11.src.rpm

diff --git a/lib/dns/message.c b/lib/dns/message.c
index bc4d127..0ba559f 100644
--- a/lib/dns/message.c
+++ b/lib/dns/message.c
@@ -2582,9 +2582,9 @@ dns_message_setopt(dns_message_t *msg, dns_rdataset_t *opt) {
 	return (ISC_R_SUCCESS);
 
  cleanup:
+	dns_rdataset_disassociate(opt);
 	dns_message_puttemprdataset(msg, &opt);
 	return (result);
-
 }
 
 dns_rdataset_t *
diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c
index 20e19f9..21fcd36 100644
--- a/lib/dns/resolver.c
+++ b/lib/dns/resolver.c
@@ -946,23 +946,20 @@ resquery_senddone(isc_task_t *task, isc_event_t *event) {
 
 static inline isc_result_t
 fctx_addopt(dns_message_t *message, dns_resolver_t *res) {
-	dns_rdataset_t *rdataset;
-	dns_rdatalist_t *rdatalist;
-	dns_rdata_t *rdata;
+	dns_rdataset_t *rdataset = NULL;
+	dns_rdatalist_t *rdatalist = NULL;
+	dns_rdata_t *rdata = NULL;
 	isc_result_t result;
 
-	rdatalist = NULL;
 	result = dns_message_gettemprdatalist(message, &rdatalist);
 	if (result != ISC_R_SUCCESS)
 		return (result);
-	rdata = NULL;
 	result = dns_message_gettemprdata(message, &rdata);
 	if (result != ISC_R_SUCCESS)
-		return (result);
-	rdataset = NULL;
+		goto cleanup;
 	result = dns_message_gettemprdataset(message, &rdataset);
 	if (result != ISC_R_SUCCESS)
-		return (result);
+		goto cleanup;
 	dns_rdataset_init(rdataset);
 
 	rdatalist->type = dns_rdatatype_opt;
@@ -977,7 +974,6 @@ fctx_addopt(dns_message_t *message, dns_resolver_t *res) {
 	 * Set EXTENDED-RCODE, VERSION, and Z to 0, and the DO bit to 1.
 	 */
 	rdatalist->ttl = DNS_MESSAGEEXTFLAG_DO;
-
 	/*
 	 * No EDNS options.
 	 */
@@ -992,6 +988,15 @@ fctx_addopt(dns_message_t *message, dns_resolver_t *res) {
 	RUNTIME_CHECK(dns_rdatalist_tordataset(rdatalist, rdataset) == ISC_R_SUCCESS);
 
 	return (dns_message_setopt(message, rdataset));
+
+ cleanup:
+	if (rdata != NULL)
+		dns_message_puttemprdata(message, &rdata);
+	if (rdataset != NULL)
+		dns_message_puttemprdataset(message, &rdataset);
+	if (rdatalist != NULL)
+		dns_message_puttemprdatalist(message, &rdatalist);
+	return (result);
 }
 
 static inline void