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

This commit is contained in:
Martin Panter 2016-03-28 00:22:09 +00:00
parent ce913877e4
commit f6b1d66a3c
4 changed files with 15 additions and 5 deletions

View file

@ -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

View file

@ -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:
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):
# 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."""

View file

@ -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

View file

@ -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