Kaydet (Commit) 3df58d11 authored tarafından Antoine Pitrou's avatar Antoine Pitrou

Merged revisions 80423 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r80423 | antoine.pitrou | 2010-04-24 00:54:59 +0200 (sam., 24 avril 2010) | 4 lines

  Issue #7943: Fix circular reference created when instantiating an SSL
  socket.  Initial patch by Péter Szabó.
........
üst 07072168
...@@ -74,7 +74,7 @@ from _ssl import \ ...@@ -74,7 +74,7 @@ from _ssl import \
SSL_ERROR_EOF, \ SSL_ERROR_EOF, \
SSL_ERROR_INVALID_ERROR_CODE SSL_ERROR_INVALID_ERROR_CODE
from socket import socket, _fileobject from socket import socket, _fileobject, _delegate_methods
from socket import getnameinfo as _getnameinfo from socket import getnameinfo as _getnameinfo
import base64 # for DER-to-PEM translation import base64 # for DER-to-PEM translation
...@@ -90,13 +90,14 @@ class SSLSocket(socket): ...@@ -90,13 +90,14 @@ class SSLSocket(socket):
do_handshake_on_connect=True, do_handshake_on_connect=True,
suppress_ragged_eofs=True): suppress_ragged_eofs=True):
socket.__init__(self, _sock=sock._sock) socket.__init__(self, _sock=sock._sock)
# the initializer for socket trashes the methods (tsk, tsk), so... # The initializer for socket overrides the methods send(), recv(), etc.
self.send = lambda data, flags=0: SSLSocket.send(self, data, flags) # in the instancce, which we don't need -- but we want to provide the
self.sendto = lambda data, addr, flags=0: SSLSocket.sendto(self, data, addr, flags) # methods defined in SSLSocket.
self.recv = lambda buflen=1024, flags=0: SSLSocket.recv(self, buflen, flags) for attr in _delegate_methods:
self.recvfrom = lambda addr, buflen=1024, flags=0: SSLSocket.recvfrom(self, addr, buflen, flags) try:
self.recv_into = lambda buffer, nbytes=None, flags=0: SSLSocket.recv_into(self, buffer, nbytes, flags) delattr(self, attr)
self.recvfrom_into = lambda buffer, nbytes=None, flags=0: SSLSocket.recvfrom_into(self, buffer, nbytes, flags) except AttributeError:
pass
if certfile and not keyfile: if certfile and not keyfile:
keyfile = certfile keyfile = certfile
......
...@@ -14,6 +14,7 @@ import pprint ...@@ -14,6 +14,7 @@ import pprint
import urllib, urlparse import urllib, urlparse
import shutil import shutil
import traceback import traceback
import weakref
from BaseHTTPServer import HTTPServer from BaseHTTPServer import HTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler from SimpleHTTPServer import SimpleHTTPRequestHandler
...@@ -113,6 +114,15 @@ class BasicTests(unittest.TestCase): ...@@ -113,6 +114,15 @@ class BasicTests(unittest.TestCase):
if (d1 != d2): if (d1 != d2):
raise test_support.TestFailed("PEM-to-DER or DER-to-PEM translation failed") raise test_support.TestFailed("PEM-to-DER or DER-to-PEM translation failed")
def test_refcycle(self):
# Issue #7943: an SSL object doesn't create reference cycles with
# itself.
s = socket.socket(socket.AF_INET)
ss = ssl.wrap_socket(s)
wr = weakref.ref(ss)
del ss
self.assertEqual(wr(), None)
class NetworkedTests(unittest.TestCase): class NetworkedTests(unittest.TestCase):
def testConnect(self): def testConnect(self):
......
...@@ -701,6 +701,7 @@ Andrew Svetlov ...@@ -701,6 +701,7 @@ Andrew Svetlov
Kalle Svensson Kalle Svensson
Paul Swartz Paul Swartz
Thenault Sylvain Thenault Sylvain
Pter Szab
Arfrever Frehtes Taifersar Arahesis Arfrever Frehtes Taifersar Arahesis
Geoff Talvola Geoff Talvola
William Tanksley William Tanksley
......
...@@ -33,6 +33,9 @@ Core and Builtins ...@@ -33,6 +33,9 @@ Core and Builtins
Library Library
------- -------
- Issue #7943: Fix circular reference created when instantiating an SSL
socket. Initial patch by Péter Szabó.
- Issue #8108: Fix the unwrap() method of SSL objects when the socket has - Issue #8108: Fix the unwrap() method of SSL objects when the socket has
a non-infinite timeout. Also make that method friendlier with applications a non-infinite timeout. Also make that method friendlier with applications
wanting to continue using the socket in clear-text mode, by disabling wanting to continue using the socket in clear-text mode, by disabling
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment