Last change
on this file was 391, checked in by dmik, 11 years ago |
python: Merge vendor 2.7.6 to trunk.
|
-
Property svn:eol-style
set to
native
|
File size:
873 bytes
|
Line | |
---|
1 | #
|
---|
2 | # The various methods of bufferobject.c (here buffer_subscript()) call
|
---|
3 | # get_buf() before calling potentially more Python code (here via
|
---|
4 | # PySlice_GetIndicesEx()). But get_buf() already returned a void*
|
---|
5 | # pointer. This void* pointer can become invalid if the object
|
---|
6 | # underlying the buffer is mutated (here a bytearray object).
|
---|
7 | #
|
---|
8 | # As usual, please keep in mind that the three "here" in the sentence
|
---|
9 | # above are only examples. Each can be changed easily and lead to
|
---|
10 | # another crasher.
|
---|
11 | #
|
---|
12 | # This crashes for me on Linux 32-bits with CPython 2.6 and 2.7
|
---|
13 | # with a segmentation fault.
|
---|
14 | #
|
---|
15 |
|
---|
16 |
|
---|
17 | class PseudoIndex(object):
|
---|
18 | def __index__(self):
|
---|
19 | for c in "foobar"*n:
|
---|
20 | a.append(c)
|
---|
21 | return n * 4
|
---|
22 |
|
---|
23 |
|
---|
24 | for n in range(1, 100000, 100):
|
---|
25 | a = bytearray("test"*n)
|
---|
26 | buf = buffer(a)
|
---|
27 |
|
---|
28 | s = buf[:PseudoIndex():1]
|
---|
29 | #print repr(s)
|
---|
30 | #assert s == "test"*n
|
---|
Note:
See
TracBrowser
for help on using the repository browser.