]> granicus.if.org Git - python/commitdiff
Issue #22042: Avoid dangerous C cast in socket.setblocking()
authorVictor Stinner <victor.stinner@gmail.com>
Wed, 23 Jul 2014 20:56:55 +0000 (22:56 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Wed, 23 Jul 2014 20:56:55 +0000 (22:56 +0200)
Avoid cast from (int*) to (u_long*), even if sizeof(int) == sizeof(u_long).

Modules/socketmodule.c

index 780447c041456c6212413a677494737a4004b563..f510f0e2148dedf5db0d3b6690c030c928dbb40a 100644 (file)
@@ -548,6 +548,9 @@ set_gaierror(int error)
 static int
 internal_setblocking(PySocketSockObject *s, int block)
 {
+#ifdef MS_WINDOWS
+    u_long arg;
+#endif
 #if !defined(MS_WINDOWS) \
     && !((defined(HAVE_SYS_IOCTL_H) && defined(FIONBIO)))
     int delay_flag, new_delay_flag;
@@ -574,8 +577,8 @@ internal_setblocking(PySocketSockObject *s, int block)
         fcntl(s->sock_fd, F_SETFL, new_delay_flag);
 #endif
 #else /* MS_WINDOWS */
-    block = !block;
-    ioctlsocket(s->sock_fd, FIONBIO, (u_long*)&block);
+    arg = !block;
+    ioctlsocket(s->sock_fd, FIONBIO, &arg);
 #endif /* MS_WINDOWS */
     Py_END_ALLOW_THREADS