From: Willem Toorop Date: Tue, 21 Aug 2012 08:46:12 +0000 (+0000) Subject: Make ldns_resolver_pop_nameserver clear the array when there was only one nameserver... X-Git-Tag: release-1.6.14rc1~48 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fb0436cf15068561a7aab39471b15ee46706b323;p=thirdparty%2Fldns.git Make ldns_resolver_pop_nameserver clear the array when there was only one nameserver in it. (it didn't before allowing for double frees etc.) --- diff --git a/Changelog b/Changelog index bd90ff2e..a8547c09 100644 --- a/Changelog +++ b/Changelog @@ -1,4 +1,6 @@ 1.6.14 + * bugfix: Make ldns_resolver_pop_nameserver clear the array when + there was only one. * bugfix #459: Export only symbols defined in ldns_symbols * bugfix #458: Track all newly created signatures when signing. * bugfix #454: Only set -g and -O2 CFLAGS when no CFLAGS was given. diff --git a/resolver.c b/resolver.c index 1a788a36..8f4f4d41 100644 --- a/resolver.c +++ b/resolver.c @@ -253,13 +253,20 @@ ldns_resolver_pop_nameserver(ldns_resolver *r) pop = nameservers[ns_count - 1]; - nameservers = LDNS_XREALLOC(nameservers, ldns_rdf *, (ns_count - 1)); - rtt = LDNS_XREALLOC(rtt, size_t, (ns_count - 1)); + if (ns_count == 1) { + LDNS_FREE(nameservers); + LDNS_FREE(rtt); + + ldns_resolver_set_nameservers(r, NULL); + ldns_resolver_set_rtt(r, NULL); + } else { + nameservers = LDNS_XREALLOC(nameservers, ldns_rdf *, + (ns_count - 1)); + rtt = LDNS_XREALLOC(rtt, size_t, (ns_count - 1)); - if(nameservers) ldns_resolver_set_nameservers(r, nameservers); - if(rtt) ldns_resolver_set_rtt(r, rtt); + } /* decr the count */ ldns_resolver_dec_nameserver_count(r); return pop;