dns_name_t *name2 = NULL;
dns_offsets_t *offsets;
dns_rdataset_t *rdataset = NULL;
- dns_rdataset_t *rdataset2 = NULL;
+ dns_rdataset_t *found_rdataset = NULL;
dns_rdatalist_t *rdatalist;
isc_result_t result = ISC_R_SUCCESS;
dns_rdatatype_t rdtype, covers;
isedns = false;
issigzero = false;
istsig = false;
+ found_rdataset = NULL;
name = isc_mempool_get(msg->namepool);
if (name == NULL)
* the question section, fail.
*/
if (dns_rdatatype_questiononly(rdtype)) {
- dns_message_puttemprdataset(msg, &rdataset);
DO_ERROR(DNS_R_FORMERR);
}
ISC_HT_CASE_SENSITIVE);
free_ht = true;
}
- rdataset2 = NULL;
result = rds_hash_add(name->ht, rdataset,
- &rdataset2);
+ &found_rdataset);
/*
* If we found an rdataset that matches, we need to
/* Free the rdataset we used as the key */
dns_rdataset_disassociate(rdataset);
dns__message_puttemprdataset(msg, &rdataset);
- rdataset = rdataset2;
- rdataset2 = NULL;
-
result = ISC_R_SUCCESS;
+ rdataset = found_rdataset;
if (!dns_rdatatype_issingleton(rdtype)) {
break;
}
- dns_rdata_t *first;
dns_rdatalist_fromrdataset(rdataset,
&rdatalist);
- first = ISC_LIST_HEAD(rdatalist->rdata);
+ dns_rdata_t *first =
+ ISC_LIST_HEAD(rdatalist->rdata);
INSIST(first != NULL);
if (dns_rdata_compare(rdata, first) != 0) {
DO_ERROR(DNS_R_FORMERR);
dns_rcode_t ercode;
msg->opt = rdataset;
- rdataset = NULL;
ercode = (dns_rcode_t)
((msg->opt->ttl & DNS_MESSAGE_EDNSRCODE_MASK)
>> 20);
msg->sig0 = rdataset;
msg->sig0name = name;
msg->sigstart = recstart;
- rdataset = NULL;
free_name = false;
} else if (istsig) {
msg->tsig = rdataset;
* Windows doesn't like TSIG names to be compressed.
*/
msg->tsigname->attributes |= DNS_NAMEATTR_NOCOMPRESS;
- rdataset = NULL;
free_name = false;
}
+ rdataset = NULL;
if (seen_problem) {
if (free_name)
free_name = false;
}
INSIST(free_name == false);
-
- rdataset = NULL;
}
/*
}
cleanup:
+ if (rdataset != NULL && rdataset != found_rdataset) {
+ dns_rdataset_disassociate(rdataset);
+ isc_mempool_put(msg->rdspool, rdataset);
+ }
if (free_name) {
dns_message_puttempname(msg, &name);
}