]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-114917: add support for AI_NUMERICSERV in getaddrinfo emulation (#114918)
authorMax Bachmann <kontakt@maxbachmann.de>
Tue, 18 Mar 2025 10:26:51 +0000 (11:26 +0100)
committerGitHub <noreply@github.com>
Tue, 18 Mar 2025 10:26:51 +0000 (11:26 +0100)
Lib/test/test_socket.py
Misc/NEWS.d/next/Library/2024-02-02-15-26-48.gh-issue-114917.sf0GuO.rst [new file with mode: 0644]
Modules/addrinfo.h
Modules/getaddrinfo.c

index fc6e8593ae30bba872e67f904bfaab7b6134fa3c..6572032c1d14bde258167ca5eadea95bb87dd52f 100644 (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.
diff --git a/Misc/NEWS.d/next/Library/2024-02-02-15-26-48.gh-issue-114917.sf0GuO.rst b/Misc/NEWS.d/next/Library/2024-02-02-15-26-48.gh-issue-114917.sf0GuO.rst
new file mode 100644 (file)
index 0000000..02aab3f
--- /dev/null
@@ -0,0 +1 @@
+Add support for AI_NUMERICSERV in getaddrinfo emulation
index 66e5a795f86f1942285e4ebc5a5dead948f37d84..8c2cb3b4f3e7279f429f3b10a7a99a7a336bb2ab 100644 (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 */
index 7a178671fe6e878f78f48ea181ab73bbc338c702..5219330d0f61e865f9b5c0518973f3ff9a7c4267 100644 (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: