Commit f6b1d66a authored by Martin Panter's avatar Martin Panter

Issue #23804: Fix SSL recv/read(0) to not return 1024 bytes

parent ce913877
...@@ -842,7 +842,7 @@ SSL Sockets ...@@ -842,7 +842,7 @@ SSL Sockets
SSL sockets also have the following additional methods and attributes: SSL sockets also have the following additional methods and attributes:
.. method:: SSLSocket.read(len=0, buffer=None) .. method:: SSLSocket.read(len=1024, buffer=None)
Read up to *len* bytes of data from the SSL socket and return the result as Read up to *len* bytes of data from the SSL socket and return the result as
a ``bytes`` instance. If *buffer* is specified, then read into the buffer a ``bytes`` instance. If *buffer* is specified, then read into the buffer
......
...@@ -561,7 +561,7 @@ class SSLObject: ...@@ -561,7 +561,7 @@ class SSLObject:
server hostame is set.""" server hostame is set."""
return self._sslobj.server_hostname return self._sslobj.server_hostname
def read(self, len=0, buffer=None): def read(self, len=1024, buffer=None):
"""Read up to 'len' bytes from the SSL object and return them. """Read up to 'len' bytes from the SSL object and return them.
If 'buffer' is provided, read into this buffer and return the number of If 'buffer' is provided, read into this buffer and return the number of
...@@ -570,7 +570,7 @@ class SSLObject: ...@@ -570,7 +570,7 @@ class SSLObject:
if buffer is not None: if buffer is not None:
v = self._sslobj.read(len, buffer) v = self._sslobj.read(len, buffer)
else: else:
v = self._sslobj.read(len or 1024) v = self._sslobj.read(len)
return v return v
def write(self, data): def write(self, data):
...@@ -776,7 +776,7 @@ class SSLSocket(socket): ...@@ -776,7 +776,7 @@ class SSLSocket(socket):
# EAGAIN. # EAGAIN.
self.getpeername() self.getpeername()
def read(self, len=0, buffer=None): def read(self, len=1024, buffer=None):
"""Read up to LEN bytes and return them. """Read up to LEN bytes and return them.
Return zero-length string on EOF.""" Return zero-length string on EOF."""
......
...@@ -2792,13 +2792,20 @@ else: ...@@ -2792,13 +2792,20 @@ else:
# consume data # consume data
s.read() s.read()
# read(-1, buffer) is supported, even though read(-1) is not
data = b"data" data = b"data"
# read(-1, buffer) is supported, even though read(-1) is not
s.send(data) s.send(data)
buffer = bytearray(len(data)) buffer = bytearray(len(data))
self.assertEqual(s.read(-1, buffer), len(data)) self.assertEqual(s.read(-1, buffer), len(data))
self.assertEqual(buffer, 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 # Make sure sendmsg et al are disallowed to avoid
# inadvertent disclosure of data and/or corruption # inadvertent disclosure of data and/or corruption
# of the encrypted data stream # of the encrypted data stream
......
...@@ -101,6 +101,9 @@ Library ...@@ -101,6 +101,9 @@ Library
- Issue #26644: Raise ValueError rather than SystemError when a negative - Issue #26644: Raise ValueError rather than SystemError when a negative
length is passed to SSLSocket.recv() or read(). length is passed to SSLSocket.recv() or read().
- Issue #23804: Fix SSL recv(0) and read(0) methods to return zero bytes
instead of up to 1024.
- Issue #26616: Fixed a bug in datetime.astimezone() method. - Issue #26616: Fixed a bug in datetime.astimezone() method.
- Issue #21925: :func:`warnings.formatwarning` now catches exceptions on - Issue #21925: :func:`warnings.formatwarning` now catches exceptions on
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment