]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.9] gh-98793: Fix typecheck in `overlapped.c` (GH-98835) (GH-98890) (GH-140825)
authorŁukasz Langa <lukasz@langa.pl>
Fri, 31 Oct 2025 15:37:20 +0000 (16:37 +0100)
committerGitHub <noreply@github.com>
Fri, 31 Oct 2025 15:37:20 +0000 (16:37 +0100)
(cherry picked from commit d3d1738acd4f62869d7f1e119c257e2ee46fd16f)

Co-authored-by: Charlie Zhao <zhaoyu_hit@qq.com>
Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
Co-authored-by: Petr Viktorin <encukou@gmail.com>
Lib/test/test_asyncio/test_windows_events.py
Misc/NEWS.d/next/Library/2022-10-29-03-40-18.gh-issue-98793.WSPB4A.rst [new file with mode: 0644]
Modules/overlapped.c

index a8939d58540f4740456487b16b3a29f2f9b64722..0e9d09af142833f2e2182b292d7ce5d7c525f7a8 100644 (file)
@@ -279,6 +279,17 @@ class ProactorTests(WindowsEventsTestCase):
         stop.set()
         thr.join()
 
+    def test_address_argument_type_error(self):
+        # Regression test for https://github.com/python/cpython/issues/98793
+        proactor = self.loop._proactor
+        sock = socket.socket(type=socket.SOCK_DGRAM)
+        bad_address = None
+        with self.assertRaises(TypeError):
+            proactor.connect(sock, bad_address)
+        with self.assertRaises(TypeError):
+            proactor.sendto(sock, b'abc', addr=bad_address)
+        sock.close()
+
 
 class WinPolicyTests(WindowsEventsTestCase):
 
diff --git a/Misc/NEWS.d/next/Library/2022-10-29-03-40-18.gh-issue-98793.WSPB4A.rst b/Misc/NEWS.d/next/Library/2022-10-29-03-40-18.gh-issue-98793.WSPB4A.rst
new file mode 100644 (file)
index 0000000..7b67af0
--- /dev/null
@@ -0,0 +1 @@
+Fix argument typechecks in :func:`!_overlapped.WSAConnect` and :func:`!_overlapped.Overlapped.WSASendTo` functions.
index 5f8a82347355d9500db96f29e44bff0cee790cfc..0abe5b781138bfe9faedc071b1b1d1148ec8a600 100644 (file)
@@ -1552,7 +1552,9 @@ overlapped_WSAConnect(PyObject *self, PyObject *args)
     int Length;
     int err;
 
-    if (!PyArg_ParseTuple(args, F_HANDLE "O", &ConnectSocket, &AddressObj)) {
+
+    if (!PyArg_ParseTuple(args, F_HANDLE "O!:WSAConnect",
+                          &ConnectSocket, &PyTuple_Type, &AddressObj)) {
         return NULL;
     }
 
@@ -1598,8 +1600,8 @@ Overlapped_WSASendTo(OverlappedObject *self, PyObject *args)
     int ret;
     DWORD err;
 
-    if (!PyArg_ParseTuple(args, F_HANDLE "O" F_DWORD "O",
-                          &handle, &bufobj, &flags, &AddressObj))
+    if (!PyArg_ParseTuple(args, F_HANDLE "OkO!:WSASendTo",
+        &handle, &bufobj, &flags, &PyTuple_Type, &AddressObj))
     {
         return NULL;
     }