diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2014-07-26 12:36:55 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2014-07-26 12:36:55 (GMT) |
commit | e254e53c833d39e1e479a16d7976a7726c0c1981 (patch) | |
tree | 665b7fcd7a0acb9a38b51bd34fdf9dbe252cc8ff /Modules | |
parent | 51e44ea66aefb4229e506263acf40d35596d279c (diff) | |
download | cpython-e254e53c833d39e1e479a16d7976a7726c0c1981.zip cpython-e254e53c833d39e1e479a16d7976a7726c0c1981.tar.gz cpython-e254e53c833d39e1e479a16d7976a7726c0c1981.tar.bz2 |
Fix repr(_socket.socket) on Windows 64-bit: don't fail with OverflowError
on closed socket. repr(socket.socket) already works fine.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/socketmodule.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 7c08f8f..b37e793 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -3868,8 +3868,13 @@ sock_dealloc(PySocketSockObject *s) static PyObject * sock_repr(PySocketSockObject *s) { + long sock_fd; + /* On Windows, this test is needed because SOCKET_T is unsigned */ + if (s->sock_fd == INVALID_SOCKET) { + sock_fd = -1; + } #if SIZEOF_SOCKET_T > SIZEOF_LONG - if (s->sock_fd > LONG_MAX) { + else if (s->sock_fd > LONG_MAX) { /* this can occur on Win64, and actually there is a special ugly printf formatter for decimal pointer length integer printing, only bother if necessary*/ @@ -3879,9 +3884,11 @@ sock_repr(PySocketSockObject *s) return NULL; } #endif + else + sock_fd = (long)s->sock_fd; return PyUnicode_FromFormat( "<socket object, fd=%ld, family=%d, type=%d, proto=%d>", - (long)s->sock_fd, s->sock_family, + sock_fd, s->sock_family, s->sock_type, s->sock_proto); } |