mirror of https://github.com/python/cpython
A new crasher.
This commit is contained in:
parent
2b0bea5d27
commit
5364e2e46f
|
@ -0,0 +1,31 @@
|
||||||
|
|
||||||
|
# The cycle GC collector can be executed when any GC-tracked object is
|
||||||
|
# allocated, e.g. during a call to PyList_New(), PyDict_New(), ...
|
||||||
|
# Moreover, it can invoke arbitrary Python code via a weakref callback.
|
||||||
|
# This means that there are many places in the source where an arbitrary
|
||||||
|
# mutation could unexpectedly occur.
|
||||||
|
|
||||||
|
# The example below shows list_slice() not expecting the call to
|
||||||
|
# PyList_New to mutate the input list. (Of course there are many
|
||||||
|
# more examples like this one.)
|
||||||
|
|
||||||
|
|
||||||
|
import weakref
|
||||||
|
|
||||||
|
class A(object):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def callback(x):
|
||||||
|
del lst[:]
|
||||||
|
|
||||||
|
|
||||||
|
keepalive = []
|
||||||
|
|
||||||
|
for i in range(100):
|
||||||
|
lst = [str(i)]
|
||||||
|
a = A()
|
||||||
|
a.cycle = a
|
||||||
|
keepalive.append(weakref.ref(a, callback))
|
||||||
|
del a
|
||||||
|
while lst:
|
||||||
|
keepalive.append(lst[:])
|
Loading…
Reference in New Issue