From f25e35b9ec2bb87833108c5bb615113a93894dce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Fri, 27 Jul 2007 18:28:22 +0000 Subject: Bug #978833: Close https sockets by releasing the _ssl object. --- Lib/httplib.py | 3 +++ Lib/socket.py | 4 ++++ Lib/test/test_socket_ssl.py | 19 +++++++++++++++++++ Misc/NEWS | 2 ++ 4 files changed, 28 insertions(+) diff --git a/Lib/httplib.py b/Lib/httplib.py index badaf1a..aee9b0d 100644 --- a/Lib/httplib.py +++ b/Lib/httplib.py @@ -1117,6 +1117,9 @@ class FakeSocket(SharedSocketClient): def __getattr__(self, attr): return getattr(self._sock, attr) + def close(self): + SharedSocketClient.close(self) + self._ssl = None class HTTPSConnection(HTTPConnection): "This class allows communication via SSL." diff --git a/Lib/socket.py b/Lib/socket.py index 4490fc4..45a122f 100644 --- a/Lib/socket.py +++ b/Lib/socket.py @@ -144,6 +144,10 @@ class _closedsocket(object): send = recv = recv_into = sendto = recvfrom = recvfrom_into = _dummy __getattr__ = _dummy +# Wrapper around platform socket objects. This implements +# a platform-independent dup() functionality. The +# implementation currently relies on reference counting +# to close the underlying socket object. class _socketobject(object): __doc__ = _realsocket.__doc__ diff --git a/Lib/test/test_socket_ssl.py b/Lib/test/test_socket_ssl.py index dffa2c5..e08ec44 100644 --- a/Lib/test/test_socket_ssl.py +++ b/Lib/test/test_socket_ssl.py @@ -106,6 +106,25 @@ class BasicTests(unittest.TestCase): connector() t.join() + def test_978833(self): + if test_support.verbose: + print "test_978833 ..." + + import os, httplib + with test_support.transient_internet(): + s = socket.socket(socket.AF_INET) + s.connect(("www.sf.net", 443)) + fd = s._sock.fileno() + sock = httplib.FakeSocket(s, socket.ssl(s)) + s = None + sock.close() + try: + os.fstat(fd) + except OSError: + pass + else: + raise test_support.TestFailed("Failed to close socket") + class OpenSSLTests(unittest.TestCase): def testBasic(self): diff --git a/Misc/NEWS b/Misc/NEWS index 578c2c0..4764daf 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -238,6 +238,8 @@ Core and builtins Library ------- +- Bug #978833: Close https sockets by releasing the _ssl object. + - Change location of the package index to pypi.python.org/pypi - Bug #1701409: Fix a segfault in printing ctypes.c_char_p and -- cgit v0.12