From: Antoine Pitrou Date: Tue, 14 Sep 2010 14:43:44 +0000 (+0000) Subject: Issue #9853: Fix the signature of SSLSocket.recvfrom() and X-Git-Tag: v3.2a3~268 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a468adc76d7e946b073579b783b246eb5e53850e;p=thirdparty%2FPython%2Fcpython.git Issue #9853: Fix the signature of SSLSocket.recvfrom() and SSLSocket.sendto() to match the corresponding socket methods. --- diff --git a/Lib/ssl.py b/Lib/ssl.py index 0c609be3d29b..d5e48748c7c2 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 748406ad8976..6b79615f284f 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 e30f97c9d5bb..c6ae1ced6b77 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.