From b6dab6bce83bc64d07abb9eeb9daec461414bc08 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 23 Jul 2014 22:56:55 +0200 Subject: [PATCH] Issue #22042: Avoid dangerous C cast in socket.setblocking() Avoid cast from (int*) to (u_long*), even if sizeof(int) == sizeof(u_long). --- Modules/socketmodule.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 780447c0414..f510f0e2148 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -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