Commit ef4bb1e9 authored by Martin Panter's avatar Martin Panter

Issue #23804: Merge SSL zero read fix from 3.5

parents 2a65ecb7 f6b1d66a
...@@ -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."""
......
...@@ -2783,13 +2783,20 @@ if _have_threads: ...@@ -2783,13 +2783,20 @@ if _have_threads:
# 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
......
...@@ -239,6 +239,9 @@ Library ...@@ -239,6 +239,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 #26637: The :mod:`importlib` module now emits an :exc:`ImportError` - Issue #26637: The :mod:`importlib` module now emits an :exc:`ImportError`
......
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