[pypy-commit] pypy default: Fix underlying list of bytearrays being reused inappropriately
waedt
noreply at buildbot.pypy.org
Sun Jul 13 13:31:24 CEST 2014
Author: Tyler Wade <wayedt at gmail.com>
Branch:
Changeset: r72431:2eef95188f80
Date: 2014-07-13 05:50 -0500
http://bitbucket.org/pypy/pypy/changeset/2eef95188f80/
Log: Fix underlying list of bytearrays being reused inappropriately
diff --git a/pypy/objspace/std/bytearrayobject.py b/pypy/objspace/std/bytearrayobject.py
--- a/pypy/objspace/std/bytearrayobject.py
+++ b/pypy/objspace/std/bytearrayobject.py
@@ -41,6 +41,8 @@
return ''.join(self.data)
def _new(self, value):
+ if value is self.data:
+ value = value[:]
return W_BytearrayObject(value)
def _new_from_buffer(self, buffer):
diff --git a/pypy/objspace/std/stringmethods.py b/pypy/objspace/std/stringmethods.py
--- a/pypy/objspace/std/stringmethods.py
+++ b/pypy/objspace/std/stringmethods.py
@@ -455,7 +455,7 @@
d = width - len(value)
if d > 0:
fillchar = self._multi_chr(fillchar[0])
- value += d * fillchar
+ value = value + fillchar * d
return self._new(value)
diff --git a/pypy/objspace/std/test/test_bytearrayobject.py b/pypy/objspace/std/test/test_bytearrayobject.py
--- a/pypy/objspace/std/test/test_bytearrayobject.py
+++ b/pypy/objspace/std/test/test_bytearrayobject.py
@@ -223,6 +223,20 @@
check(bytearray('abc').rstrip(memoryview('c')), 'ab')
check(bytearray('aba').strip('a'), 'b')
+ def test_xjust_no_mutate(self):
+ # a previous regression
+ b = bytearray(b'')
+ assert b.ljust(1) == bytearray(b' ')
+ assert not len(b)
+
+ b2 = b.ljust(0)
+ b2 += b' '
+ assert not len(b)
+
+ b2 = b.rjust(0)
+ b2 += b' '
+ assert not len(b)
+
def test_split(self):
# methods that should return a sequence of bytearrays
def check(result, expected):
More information about the pypy-commit
mailing list