Author: Armin Rigo <ar...@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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit