diff options
author | ngie <ngie@FreeBSD.org> | 2016-08-29 05:46:35 +0000 |
---|---|---|
committer | ngie <ngie@FreeBSD.org> | 2016-08-29 05:46:35 +0000 |
commit | c058f89f159ec8b3fa8ba18b416d961ef92ca783 (patch) | |
tree | a2424d335b1f206a9afb8ffeb00bffcdfe8623c0 /lib/libc | |
parent | a9e26c2eb348208f3d581b504f237a3a72cfccb3 (diff) | |
download | FreeBSD-src-c058f89f159ec8b3fa8ba18b416d961ef92ca783.zip FreeBSD-src-c058f89f159ec8b3fa8ba18b416d961ef92ca783.tar.gz |
MFstable/11 r304945:
MFC r304034:
Initialize `ai` to NULL and test for `ai` with type-appropriate values
Depending on the address family and ai_flags containing AI_V4MAPPED,
it might not do a proper DNS lookup on the provided DNS address
Convert some `ai` boolean true/false checks to NULL/non-NULL while here.
PR: 211790
Diffstat (limited to 'lib/libc')
-rw-r--r-- | lib/libc/net/getaddrinfo.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/libc/net/getaddrinfo.c b/lib/libc/net/getaddrinfo.c index 54ac329..d987a16 100644 --- a/lib/libc/net/getaddrinfo.c +++ b/lib/libc/net/getaddrinfo.c @@ -2251,6 +2251,8 @@ _dns_getaddrinfo(void *rv, void *cb_data, va_list ap) struct res_target q, q2; res_state res; + ai = NULL; + hostname = va_arg(ap, char *); pai = va_arg(ap, const struct addrinfo *); @@ -2329,16 +2331,16 @@ _dns_getaddrinfo(void *rv, void *cb_data, va_list ap) /* prefer IPv6 */ if (q.next) { ai = getanswer(buf2, q2.n, q2.name, q2.qtype, pai, res); - if (ai) { + if (ai != NULL) { cur->ai_next = ai; while (cur && cur->ai_next) cur = cur->ai_next; } } - if (!ai || pai->ai_family != AF_UNSPEC || + if (ai == NULL || pai->ai_family != AF_UNSPEC || (pai->ai_flags & (AI_ALL | AI_V4MAPPED)) != AI_V4MAPPED) { ai = getanswer(buf, q.n, q.name, q.qtype, pai, res); - if (ai) + if (ai != NULL) cur->ai_next = ai; } free(buf); |