summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorMartin Panter <vadmium+py@gmail.com>2016-07-11 00:17:13 (GMT)
committerMartin Panter <vadmium+py@gmail.com>2016-07-11 00:17:13 (GMT)
commitbed7f1a51245e9c9ca63eeea779f387bfd5a05af (patch)
tree2cc339e532bc32b21ba1ec507857135c9eda2df3 /Lib
parentc95300aceb6833bd68898cf97127bc18910d5406 (diff)
downloadcpython-bed7f1a51245e9c9ca63eeea779f387bfd5a05af.zip
cpython-bed7f1a51245e9c9ca63eeea779f387bfd5a05af.tar.gz
cpython-bed7f1a51245e9c9ca63eeea779f387bfd5a05af.tar.bz2
Issue #23804: Fix SSL zero-length recv() calls to not block and raise EOF
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_ssl.py29
1 files changed, 21 insertions, 8 deletions
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index d2fc36d..f48103e 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -2793,20 +2793,13 @@ else:
# consume data
s.read()
- data = b"data"
-
# read(-1, buffer) is supported, even though read(-1) is not
+ data = b"data"
s.send(data)
buffer = bytearray(len(data))
self.assertEqual(s.read(-1, buffer), len(data))
self.assertEqual(buffer, data)
- # recv/read(0) should return no data
- s.send(data)
- self.assertEqual(s.recv(0), b"")
- self.assertEqual(s.read(0), b"")
- self.assertEqual(s.read(), data)
-
# Make sure sendmsg et al are disallowed to avoid
# inadvertent disclosure of data and/or corruption
# of the encrypted data stream
@@ -2822,6 +2815,26 @@ else:
s.close()
+ def test_recv_zero(self):
+ server = ThreadedEchoServer(CERTFILE)
+ server.__enter__()
+ self.addCleanup(server.__exit__, None, None)
+ s = socket.create_connection((HOST, server.port))
+ self.addCleanup(s.close)
+ s = ssl.wrap_socket(s, suppress_ragged_eofs=False)
+ self.addCleanup(s.close)
+
+ # recv/read(0) should return no data
+ s.send(b"data")
+ self.assertEqual(s.recv(0), b"")
+ self.assertEqual(s.read(0), b"")
+ self.assertEqual(s.read(), b"data")
+
+ # Should not block if the other end sends no data
+ s.setblocking(False)
+ self.assertEqual(s.recv(0), b"")
+ self.assertEqual(s.recv_into(bytearray()), 0)
+
def test_nonblocking_send(self):
server = ThreadedEchoServer(CERTFILE,
certreqs=ssl.CERT_NONE,