[pypy-commit] pypy py3.3: CPython Issue #18025: Fixed a segfault in io.BufferedIOBase.readinto() when raw
amauryfa
noreply at buildbot.pypy.org
Tue Jan 6 00:24:29 CET 2015
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: py3.3
Changeset: r75250:4eebc41245ad
Date: 2015-01-05 23:45 +0100
http://bitbucket.org/pypy/pypy/changeset/4eebc41245ad/
Log: CPython Issue #18025: Fixed a segfault in
io.BufferedIOBase.readinto() when raw stream's read() returns more
bytes than requested.
diff --git a/pypy/module/_io/interp_bufferedio.py b/pypy/module/_io/interp_bufferedio.py
--- a/pypy/module/_io/interp_bufferedio.py
+++ b/pypy/module/_io/interp_bufferedio.py
@@ -77,6 +77,11 @@
raise OperationError(space.w_TypeError, space.wrap(
"read() should return bytes"))
data = space.bytes_w(w_data)
+ if len(data) > length:
+ raise oefmt(space.w_ValueError,
+ "read() returned too much data: "
+ "%d bytes requested, %d returned",
+ length, len(data))
rwbuffer.setslice(0, data)
return space.wrap(len(data))
diff --git a/pypy/module/_io/test/test_bufferedio.py b/pypy/module/_io/test/test_bufferedio.py
--- a/pypy/module/_io/test/test_bufferedio.py
+++ b/pypy/module/_io/test/test_bufferedio.py
@@ -149,6 +149,15 @@
f.close()
assert a == b'a\nb\ncxxxxx'
+ def test_readinto_buffer_overflow(self):
+ import _io
+ class BadReader(_io._BufferedIOBase):
+ def read(self, n=-1):
+ return b'x' * 10**6
+ bufio = BadReader()
+ b = bytearray(2)
+ raises(ValueError, bufio.readinto, b)
+
def test_seek(self):
import _io
raw = _io.FileIO(self.tmpfile)
More information about the pypy-commit
mailing list