mirror of
https://github.com/fluencelabs/musl
synced 2025-06-27 05:32:06 +00:00
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.
This commit is contained in:
@ -76,8 +76,7 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru
|
|||||||
if (serv) {
|
if (serv) {
|
||||||
if (!*serv) return EAI_SERVICE;
|
if (!*serv) return EAI_SERVICE;
|
||||||
port = strtoul(serv, &z, 10);
|
port = strtoul(serv, &z, 10);
|
||||||
if (!*z && port > 65535) return EAI_SERVICE;
|
if (*z) {
|
||||||
if (!port) {
|
|
||||||
size_t servlen = strlen(serv);
|
size_t servlen = strlen(serv);
|
||||||
char *end = line;
|
char *end = line;
|
||||||
|
|
||||||
@ -96,6 +95,7 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru
|
|||||||
__fclose_ca(f);
|
__fclose_ca(f);
|
||||||
if (feof(f)) return EAI_SERVICE;
|
if (feof(f)) return EAI_SERVICE;
|
||||||
}
|
}
|
||||||
|
if (port > 65535) return EAI_SERVICE;
|
||||||
port = htons(port);
|
port = htons(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user