changeset: 91803:9dc66b3a1d0d user: Victor Stinner date: Wed Jul 23 22:56:55 2014 +0200 files: Modules/socketmodule.c description: Issue #22042: Avoid dangerous C cast in socket.setblocking() Avoid cast from (int*) to (u_long*), even if sizeof(int) == sizeof(u_long). diff -r d08d1569aa04 -r 9dc66b3a1d0d Modules/socketmodule.c --- a/Modules/socketmodule.c Wed Jul 23 14:40:27 2014 -0500 +++ b/Modules/socketmodule.c Wed Jul 23 22:56:55 2014 +0200 @@ -548,6 +548,9 @@ 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 @@ 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