Kaydet (Commit) 281945f4 authored tarafından Serhiy Storchaka's avatar Serhiy Storchaka

Issue #18025: Fixed a segfault in io.BufferedIOBase.readinto() when raw

stream's read() returns more bytes than requested.
......@@ -3027,6 +3027,15 @@ class MiscIOTest(unittest.TestCase):
class CMiscIOTest(MiscIOTest):
io = io
def test_readinto_buffer_overflow(self):
# Issue #18025
class BadReader(self.io.BufferedIOBase):
def read(self, n=-1):
return b'x' * 10**6
bufio = BadReader()
b = bytearray(2)
self.assertRaises(ValueError, bufio.readinto, b)
class PyMiscIOTest(MiscIOTest):
io = pyio
......
......@@ -96,6 +96,9 @@ Core and Builtins
Library
-------
- Issue #18025: Fixed a segfault in io.BufferedIOBase.readinto() when raw
stream's read() returns more bytes than requested.
- Issue #18011: base64.b32decode() now raises a binascii.Error if there are
non-alphabet characters present in the input string to conform a docstring.
Updated the module documentation.
......
......@@ -69,6 +69,14 @@ bufferediobase_readinto(PyObject *self, PyObject *args)
}
len = Py_SIZE(data);
if (len > buf.len) {
PyErr_Format(PyExc_ValueError,
"read() returned too much data: "
"%zd bytes requested, %zd returned",
buf.len, len);
Py_DECREF(data);
goto error;
}
memcpy(buf.buf, PyBytes_AS_STRING(data), len);
PyBuffer_Release(&buf);
......
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