# # 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