mirror of https://github.com/python/cpython
Bug #978833: Close https sockets by releasing the _ssl object.
This commit is contained in:
parent
ec2ce9bbae
commit
f25e35b9ec
|
@ -1117,6 +1117,9 @@ class FakeSocket(SharedSocketClient):
|
||||||
def __getattr__(self, attr):
|
def __getattr__(self, attr):
|
||||||
return getattr(self._sock, attr)
|
return getattr(self._sock, attr)
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
SharedSocketClient.close(self)
|
||||||
|
self._ssl = None
|
||||||
|
|
||||||
class HTTPSConnection(HTTPConnection):
|
class HTTPSConnection(HTTPConnection):
|
||||||
"This class allows communication via SSL."
|
"This class allows communication via SSL."
|
||||||
|
|
|
@ -144,6 +144,10 @@ class _closedsocket(object):
|
||||||
send = recv = recv_into = sendto = recvfrom = recvfrom_into = _dummy
|
send = recv = recv_into = sendto = recvfrom = recvfrom_into = _dummy
|
||||||
__getattr__ = _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):
|
class _socketobject(object):
|
||||||
|
|
||||||
__doc__ = _realsocket.__doc__
|
__doc__ = _realsocket.__doc__
|
||||||
|
|
|
@ -106,6 +106,25 @@ class BasicTests(unittest.TestCase):
|
||||||
connector()
|
connector()
|
||||||
t.join()
|
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):
|
class OpenSSLTests(unittest.TestCase):
|
||||||
|
|
||||||
def testBasic(self):
|
def testBasic(self):
|
||||||
|
|
|
@ -238,6 +238,8 @@ Core and builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Bug #978833: Close https sockets by releasing the _ssl object.
|
||||||
|
|
||||||
- Change location of the package index to pypi.python.org/pypi
|
- Change location of the package index to pypi.python.org/pypi
|
||||||
|
|
||||||
- Bug #1701409: Fix a segfault in printing ctypes.c_char_p and
|
- Bug #1701409: Fix a segfault in printing ctypes.c_char_p and
|
||||||
|
|
Loading…
Reference in New Issue