[Jython-checkins] jython: One last add from 2.7 rev 82552:a8047d1376d5
frank.wierzbicki
jython-checkins at python.org
Mon Mar 11 18:23:51 CET 2013
http://hg.python.org/jython/rev/c3af9ed52670
changeset: 7080:c3af9ed52670
user: Frank Wierzbicki <fwierzbicki at gmail.com>
date: Sun Mar 10 19:43:37 2013 -0700
summary:
One last add from 2.7 rev 82552:a8047d1376d5
files:
lib-python/2.7/test/crashers/buffer_mutate.py | 30 ++++++++++
1 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/lib-python/2.7/test/crashers/buffer_mutate.py b/lib-python/2.7/test/crashers/buffer_mutate.py
new file mode 100644
--- /dev/null
+++ b/lib-python/2.7/test/crashers/buffer_mutate.py
@@ -0,0 +1,30 @@
+#
+# The various methods of bufferobject.c (here buffer_subscript()) call
+# get_buf() before calling potentially more Python code (here via
+# PySlice_GetIndicesEx()). But get_buf() already returned a void*
+# pointer. This void* pointer can become invalid if the object
+# underlying the buffer is mutated (here a bytearray object).
+#
+# As usual, please keep in mind that the three "here" in the sentence
+# above are only examples. Each can be changed easily and lead to
+# another crasher.
+#
+# This crashes for me on Linux 32-bits with CPython 2.6 and 2.7
+# with a segmentation fault.
+#
+
+
+class PseudoIndex(object):
+ def __index__(self):
+ for c in "foobar"*n:
+ a.append(c)
+ return n * 4
+
+
+for n in range(1, 100000, 100):
+ a = bytearray("test"*n)
+ buf = buffer(a)
+
+ s = buf[:PseudoIndex():1]
+ #print repr(s)
+ #assert s == "test"*n
--
Repository URL: http://hg.python.org/jython
More information about the Jython-checkins
mailing list