forwarded from Debian bug 192876 From: Martin Pool <mbp@sourcefrog.net> To: Debian Bug Tracking System <submit@bugs.debian.org> Subject: libc6: getaddrinfo() does not detect invalid numeric services Date: Sun, 11 May 2003 13:00:17 +1000 Package: libc6 Version: 2.3.1-16 Severity: normal By my reading of the getaddrinfo() manual (and also the Solaris manpage) getaddrinfo() ought to return EAI_SERVICE when the requested service is not available. However, it does not seem to do this when the service is a number, but out of the valid range 1-65535 for TCP ports. Here is a reproduction case: ------------------ #include <string.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> /* try getaddrinfo */ int main(void) { int err; struct addrinfo *res; struct addrinfo hints; bzero(&hints, sizeof hints); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; err = getaddrinfo(NULL, "80000", &hints, &res); printf("err=%d, %s\n", err, gai_strerror(err)); return 0; } ------------------ On my machine this returns 0, rather than the expected -8 "servname not supported". If I change "80000" to an invalid non-numeric string then the error is flagged as expected.
Created attachment 7299 [details] proposed patch
Created attachment 7300 [details] proposed patch
Could you send patch to libc-alpha@sourceware.org You need to follow https://sourceware.org/glibc/wiki/Contribution%20checklist
*** Bug 32149 has been marked as a duplicate of this bug. ***
This is unfortunately still a problem on glibc-2.40.9000.
Created attachment 15804 [details] proposed patch v2 I have update the fix for commit glibc-2.40.9000-364-g99bfa52cdb. I have made service 0 accepted, especially when AI_PASSIVE is set, that might be required to get random port. Similar to NULL. But all ports higher all always wrong.