[pypy-commit] pypy default: Issue #2222: test and fix
arigo
pypy.commits at gmail.com
Sun Jan 3 12:32:13 EST 2016
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r81533:a7b303390e51
Date: 2016-01-03 18:31 +0100
http://bitbucket.org/pypy/pypy/changeset/a7b303390e51/
Log: Issue #2222: test and fix
diff --git a/rpython/rlib/buffer.py b/rpython/rlib/buffer.py
--- a/rpython/rlib/buffer.py
+++ b/rpython/rlib/buffer.py
@@ -97,6 +97,17 @@
def __init__(self, buffer, offset, size):
self.readonly = buffer.readonly
+ if isinstance(buffer, SubBuffer): # don't nest them
+ # we want a view (offset, size) over a view
+ # (buffer.offset, buffer.size) over buffer.buffer
+ at_most = buffer.size - offset
+ if size > at_most:
+ if at_most < 0:
+ at_most = 0
+ size = at_most
+ offset += buffer.offset
+ buffer = buffer.buffer
+ #
self.buffer = buffer
self.offset = offset
self.size = size
diff --git a/rpython/rlib/test/test_buffer.py b/rpython/rlib/test/test_buffer.py
--- a/rpython/rlib/test/test_buffer.py
+++ b/rpython/rlib/test/test_buffer.py
@@ -45,3 +45,9 @@
ssbuf = SubBuffer(sbuf, 3, 2)
assert ssbuf.getslice(0, 2, 1, 2) == 'ld'
assert ssbuf.as_str_and_offset_maybe() == ('hello world', 9)
+
+def test_repeated_subbuffer():
+ buf = StringBuffer('x' * 10000)
+ for i in range(9999, 9, -1):
+ buf = SubBuffer(buf, 1, i)
+ assert buf.getlength() == 10
More information about the pypy-commit
mailing list