From: Mark Andrews Date: Mon, 17 Feb 2014 15:07:37 +0000 (+1100) Subject: unchecked isc_mem_get calls; fix loop over getaddrinfo results X-Git-Tag: v9.10.0b1~94 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=846cb7015b937eba385f7a8b81954f604f870d97;p=thirdparty%2Fbind9.git unchecked isc_mem_get calls; fix loop over getaddrinfo results --- diff --git a/bin/delve/delve.c b/bin/delve/delve.c index edd7ac41bca..d124b8c5c45 100644 --- a/bin/delve/delve.c +++ b/bin/delve/delve.c @@ -765,11 +765,15 @@ addserver(dns_client_t *client) { if (use_ipv4 && inet_pton(AF_INET, server, &in4) == 1) { sa = isc_mem_get(mctx, sizeof(*sa)); + if (sa == NULL) + return (ISC_R_NOMEMORY); ISC_LINK_INIT(sa, link); isc_sockaddr_fromin(sa, &in4, destport); ISC_LIST_APPEND(servers, sa, link); } else if (use_ipv6 && inet_pton(AF_INET6, server, &in6) == 1) { sa = isc_mem_get(mctx, sizeof(*sa)); + if (sa == NULL) + return (ISC_R_NOMEMORY); ISC_LINK_INIT(sa, link); isc_sockaddr_fromin6(sa, &in6, destport); ISC_LIST_APPEND(servers, sa, link); @@ -791,15 +795,24 @@ addserver(dns_client_t *client) { return (ISC_R_FAILURE); } - for (cur = res; cur != NULL; cur = res->ai_next) { + result = ISC_R_SUCCESS; + for (cur = res; cur != NULL; cur = cur->ai_next) { + if (cur->ai_family != AF_INET && + cur->ai_family != AF_INET6) + continue; sa = isc_mem_get(mctx, sizeof(*sa)); + if (sa == NULL) { + result = ISC_R_NOMEMORY; + break; + } memset(sa, 0, sizeof(*sa)); ISC_LINK_INIT(sa, link); - memmove(&sa->type, res->ai_addr, res->ai_addrlen); - sa->length = res->ai_addrlen; + memmove(&sa->type, cur->ai_addr, cur->ai_addrlen); + sa->length = cur->ai_addrlen; ISC_LIST_APPEND(servers, sa, link); - freeaddrinfo(res); } + freeaddrinfo(res); + CHECK(result); }