gh-114917: add support for AI_NUMERICSERV in getaddrinfo emulation (#114918)

This commit is contained in:
Max Bachmann 2025-03-18 11:26:51 +01:00 committed by GitHub
parent b0a4f6599a
commit 3453b5c1d6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 12 additions and 2 deletions

View file

@ -1662,8 +1662,11 @@ class GeneralModuleTests(unittest.TestCase):
# Issue #6697.
self.assertRaises(UnicodeEncodeError, socket.getaddrinfo, 'localhost', '\uD800')
# Issue 17269: test workaround for OS X platform bug segfault
if hasattr(socket, 'AI_NUMERICSERV'):
self.assertRaises(socket.gaierror, socket.getaddrinfo, "localhost", "http",
flags=socket.AI_NUMERICSERV)
# Issue 17269: test workaround for OS X platform bug segfault
try:
# The arguments here are undefined and the call may succeed
# or fail. All we care here is that it doesn't segfault.

View file

@ -0,0 +1 @@
Add support for AI_NUMERICSERV in getaddrinfo emulation

View file

@ -77,6 +77,7 @@
#undef AI_PASSIVE
#undef AI_CANONNAME
#undef AI_NUMERICHOST
#undef AI_NUMERICSERV
#undef AI_MASK
#undef AI_ALL
#undef AI_V4MAPPED_CFG
@ -88,8 +89,9 @@
#define AI_PASSIVE 0x00000001 /* get address to use bind() */
#define AI_CANONNAME 0x00000002 /* fill ai_canonname */
#define AI_NUMERICHOST 0x00000004 /* prevent name resolution */
#define AI_NUMERICSERV 0x00000008 /* prevent service resolution */
/* valid flags for addrinfo */
#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV)
#define AI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
#define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */

View file

@ -351,6 +351,10 @@ getaddrinfo(const char*hostname, const char*servname,
struct servent *sp;
const char *proto;
if (ai->ai_flags & AI_NUMERICSERV) {
ERR(EAI_NONAME);
}
proto = NULL;
switch (pai->ai_socktype) {
case GAI_ANY: