From 5974cdd5f598423002709d912276963c2032c69a Mon Sep 17 00:00:00 2001 From: Antoine Pitrou <solipsis@pitrou.net> Date: Tue, 14 Sep 2010 14:47:08 +0000 Subject: [PATCH] Merged revisions 84807 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r84807 | antoine.pitrou | 2010-09-14 16:43:44 +0200 (mar., 14 sept. 2010) | 4 lines Issue #9853: Fix the signature of SSLSocket.recvfrom() and SSLSocket.sendto() to match the corresponding socket methods. ........ --- Lib/ssl.py | 10 ++++++---- Lib/test/test_ssl.py | 12 ++++++++++++ Misc/NEWS | 3 +++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/Lib/ssl.py b/Lib/ssl.py index 0ba3442739..f98bd73428 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -221,13 +221,15 @@ class SSLSocket(socket): else: return socket.send(self, data, flags) - def sendto(self, data, addr, flags=0): + def sendto(self, data, flags_or_addr, addr=None): self._checkClosed() if self._sslobj: raise ValueError("sendto not allowed on instances of %s" % self.__class__) + elif addr is None: + return socket.sendto(self, data, flags_or_addr) else: - return socket.sendto(self, data, addr, flags) + return socket.sendto(self, data, flags_or_addr, addr) def sendall(self, data, flags=0): self._checkClosed() @@ -267,13 +269,13 @@ class SSLSocket(socket): else: return socket.recv_into(self, buffer, nbytes, flags) - def recvfrom(self, addr, buflen=1024, flags=0): + def recvfrom(self, buflen=1024, flags=0): self._checkClosed() if self._sslobj: raise ValueError("recvfrom not allowed on instances of %s" % self.__class__) else: - return socket.recvfrom(self, addr, buflen, flags) + return socket.recvfrom(self, buflen, flags) def recvfrom_into(self, buffer, nbytes=None, flags=0): self._checkClosed() diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index b622da5cb9..987a4259b3 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -92,6 +92,18 @@ class BasicTests(unittest.TestCase): del ss self.assertEqual(wr(), None) + def test_wrapped_unconnected(self): + # Methods on an unconnected SSLSocket propagate the original + # socket.error raise by the underlying socket object. + s = socket.socket(socket.AF_INET) + ss = ssl.wrap_socket(s) + self.assertRaises(socket.error, ss.recv, 1) + self.assertRaises(socket.error, ss.recv_into, bytearray(b'x')) + self.assertRaises(socket.error, ss.recvfrom, 1) + self.assertRaises(socket.error, ss.recvfrom_into, bytearray(b'x'), 1) + self.assertRaises(socket.error, ss.send, b'x') + self.assertRaises(socket.error, ss.sendto, b'x', ('0.0.0.0', 0)) + def test_timeout(self): # Issue #8524: when creating an SSL socket, the timeout of the # original socket should be retained. diff --git a/Misc/NEWS b/Misc/NEWS index 1cdbd79a5f..55160ca4ce 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -117,6 +117,9 @@ C-API Library ------- +- Issue #9853: Fix the signature of SSLSocket.recvfrom() and + SSLSocket.sendto() to match the corresponding socket methods. + - Issue #9792: In case of connection failure, socket.create_connection() would swallow the exception and raise a new one, making it impossible to fetch the original errno, or to filter timeout errors. Now the -- 2.40.0