diff options
Diffstat (limited to 'iterator')
| -rw-r--r-- | iterator/iter_scrub.c | 4 | ||||
| -rw-r--r-- | iterator/iterator.c | 4 | 
2 files changed, 8 insertions, 0 deletions
| diff --git a/iterator/iter_scrub.c b/iterator/iter_scrub.c index 3f1438a4ff3d..cceec3d5677a 100644 --- a/iterator/iter_scrub.c +++ b/iterator/iter_scrub.c @@ -217,6 +217,10 @@ synth_cname(uint8_t* qname, size_t qnamelen, struct rrset_parse* dname_rrset,  	size_t dtarglen;  	if(!parse_get_cname_target(dname_rrset, &dtarg, &dtarglen))  		return 0;  +	if(qnamelen <= dname_rrset->dname_len) +		return 0; +	if(qnamelen == 0) +		return 0;  	log_assert(qnamelen > dname_rrset->dname_len);  	/* DNAME from com. to net. with qname example.com. -> example.net. */  	/* so: \3com\0 to \3net\0 and qname \7example\3com\0 */ diff --git a/iterator/iterator.c b/iterator/iterator.c index c906c2714483..1e0113a8740f 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -409,6 +409,8 @@ iter_prepend(struct iter_qstate* iq, struct dns_msg* msg,  	num_an = 0;  	for(p = iq->an_prepend_list; p; p = p->next) {  		sets[num_an++] = p->rrset; +		if(ub_packed_rrset_ttl(p->rrset) < msg->rep->ttl) +			msg->rep->ttl = ub_packed_rrset_ttl(p->rrset);  	}  	memcpy(sets+num_an, msg->rep->rrsets, msg->rep->an_numrrsets *  		sizeof(struct ub_packed_rrset_key*)); @@ -421,6 +423,8 @@ iter_prepend(struct iter_qstate* iq, struct dns_msg* msg,  			msg->rep->ns_numrrsets, p->rrset))  			continue;  		sets[msg->rep->an_numrrsets + num_an + num_ns++] = p->rrset; +		if(ub_packed_rrset_ttl(p->rrset) < msg->rep->ttl) +			msg->rep->ttl = ub_packed_rrset_ttl(p->rrset);  	}  	memcpy(sets + num_an + msg->rep->an_numrrsets + num_ns,   		msg->rep->rrsets + msg->rep->an_numrrsets,  | 
