]> granicus.if.org Git - python/commitdiff
Issue #9853: Fix the signature of SSLSocket.recvfrom() and
authorAntoine Pitrou <solipsis@pitrou.net>
Tue, 14 Sep 2010 14:43:44 +0000 (14:43 +0000)
committerAntoine Pitrou <solipsis@pitrou.net>
Tue, 14 Sep 2010 14:43:44 +0000 (14:43 +0000)
SSLSocket.sendto() to match the corresponding socket methods.

Lib/ssl.py
Lib/test/test_ssl.py
Misc/NEWS

index 0c609be3d29b9b57f7ec7b97613f983c231c212a..d5e48748c7c2cc7a73839a4c53663a3b8f13885c 100644 (file)
@@ -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()
index 748406ad8976305fc964bc208891ef98767e53ff..6b79615f284fc5876aeb8d6fa4decc2dfa1fd048 100644 (file)
@@ -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.
index e30f97c9d5bbed3be5b1c336a87bfa1b6b7c872a..c6ae1ced6b77b158c85e8b14647141499da53571 100644 (file)
--- 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.