summaryrefslogtreecommitdiff
path: root/src/network/getaddrinfo.c
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-09-22 16:19:06 -0400
committerRich Felker <dalias@aerifal.cx>2012-09-22 16:19:06 -0400
commit4b49060da09b37e36ae08b49499c4a53b4f53890 (patch)
tree9960eb1e18f23596df5c8bed196321cc97ae2652 /src/network/getaddrinfo.c
parent15d111203221e988b45b47535f96889f4208c1a7 (diff)
downloadmusl-4b49060da09b37e36ae08b49499c4a53b4f53890.tar.gz
musl-4b49060da09b37e36ae08b49499c4a53b4f53890.tar.bz2
musl-4b49060da09b37e36ae08b49499c4a53b4f53890.tar.xz
musl-4b49060da09b37e36ae08b49499c4a53b4f53890.zip
fix getaddrinfo to accept port 0 (zero)
new behavior can be summarized as: inputs that parse completely as a decimal number are treated as one, and rejected only if the result is out of 16-bit range. inputs that do not parse as a decimal number (where strtoul leaves anything left over in the input) are searched in /etc/services.
Diffstat (limited to 'src/network/getaddrinfo.c')
-rw-r--r--src/network/getaddrinfo.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/network/getaddrinfo.c b/src/network/getaddrinfo.c
index b9e562f7..b341912d 100644
--- a/src/network/getaddrinfo.c
+++ b/src/network/getaddrinfo.c
@@ -76,8 +76,7 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru
if (serv) {
if (!*serv) return EAI_SERVICE;
port = strtoul(serv, &z, 10);
- if (!*z && port > 65535) return EAI_SERVICE;
- if (!port) {
+ if (*z) {
size_t servlen = strlen(serv);
char *end = line;
@@ -96,6 +95,7 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru
__fclose_ca(f);
if (feof(f)) return EAI_SERVICE;
}
+ if (port > 65535) return EAI_SERVICE;
port = htons(port);
}