diff options
-rw-r--r-- | libc/inet/getaddrinfo.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/libc/inet/getaddrinfo.c b/libc/inet/getaddrinfo.c index e7511f6c4..fe0d942d9 100644 --- a/libc/inet/getaddrinfo.c +++ b/libc/inet/getaddrinfo.c @@ -628,13 +628,20 @@ gaih_inet(const char *name, const struct gaih_service *service, char buffer[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")]; while (at2 != NULL) { - if (req->ai_flags & AI_CANONNAME) { + c = inet_ntop(at2->family, at2->addr, buffer, sizeof(buffer)); + if (c) { + namelen = strlen(c) + 1; + } else if (req->ai_flags & AI_CANONNAME) { struct hostent *h = NULL; int herrno; struct hostent th; size_t tmpbuflen = 512; char *tmpbuf; + /* Hint says numeric, but address is not */ + if (req->ai_flags & AI_NUMERICHOST) + return -EAI_NONAME; + do { tmpbuflen *= 2; tmpbuf = alloca(tmpbuflen); @@ -656,9 +663,7 @@ gaih_inet(const char *name, const struct gaih_service *service, return -EAI_SYSTEM; } - if (h == NULL) - c = inet_ntop(at2->family, at2->addr, buffer, sizeof(buffer)); - else + if (h != NULL) c = h->h_name; if (c == NULL) |