From 4b49060da09b37e36ae08b49499c4a53b4f53890 Mon Sep 17 00:00:00 2001
From: Rich Felker <dalias@aerifal.cx>
Date: Sat, 22 Sep 2012 16:19:06 -0400
Subject: 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.
---
 src/network/getaddrinfo.c | 4 ++--
 1 file 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);
 	}
 
-- 
cgit v1.2.3-70-g09d2