From a468adc76d7e946b073579b783b246eb5e53850e Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Tue, 14 Sep 2010 14:43:44 +0000 Subject: 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 0c609be..d5e4874 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -258,13 +258,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() @@ -308,13 +310,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 748406a..6b79615 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -163,6 +163,18 @@ class BasicSocketTests(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 e30f97c..c6ae1ce 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -52,6 +52,9 @@ Core and Builtins Library ------- +- Issue #9853: Fix the signature of SSLSocket.recvfrom() and + SSLSocket.sendto() to match the corresponding socket methods. + - Issue 9840: Added a decorator to reprlib for wrapping __repr__ methods to make them handle recursive calls within the same thread. -- cgit v0.12