X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fnetwork%2Fgetaddrinfo.c;h=494b412a4a1e5826eacc850d964ceb2ac7616a19;hb=2b0cedac8d03bbeb1bd0e1d77fab775b1d9f3e25;hp=90e85f6a6a7d900ebf70398a7c1fe40bbb27c459;hpb=0b44a0315b47dd8eced9f3b7f31580cf14bbfc01;p=musl diff --git a/src/network/getaddrinfo.c b/src/network/getaddrinfo.c index 90e85f6a..494b412a 100644 --- a/src/network/getaddrinfo.c +++ b/src/network/getaddrinfo.c @@ -13,7 +13,7 @@ static int is_valid(const char *host) { const unsigned char *s; if (strlen(host)-1 > 254 || mbstowcs(0, host, 0) > 255) return 0; - for (s=host; *s>=0x80 || *s=='.' || *s=='-' || isalnum(*s); s++); + for (s=(void *)host; *s>=0x80 || *s=='.' || *s=='-' || isalnum(*s); s++); return !*s; } @@ -75,6 +75,7 @@ int getaddrinfo(const char *host, const char *serv, const struct addrinfo *hint, type = proto==IPPROTO_UDP ? SOCK_DGRAM : SOCK_STREAM; if (serv) { + if (!*serv) return EAI_SERVICE; port = strtoul(serv, &z, 0); if (!*z && port > 65535) return EAI_SERVICE; if (!port) { @@ -107,6 +108,8 @@ int getaddrinfo(const char *host, const char *serv, const struct addrinfo *hint, return 0; } + if (!*host) return EAI_NONAME; + /* Try as a numeric address */ if (__ipparse(&sa, family, host) >= 0) { buf = calloc(sizeof *buf, 1+EXTRA); @@ -117,6 +120,7 @@ int getaddrinfo(const char *host, const char *serv, const struct addrinfo *hint, buf->ai.ai_addr = (void *)&buf->sa; buf->ai.ai_addrlen = family==AF_INET6 ? sizeof sa.sin6 : sizeof sa.sin; buf->ai.ai_family = family; + buf->ai.ai_canonname = (char *)host; buf->sa = sa; buf->sa.sin.sin_port = port; *res = &buf->ai;