| """ |
| _PyType_Lookup() returns a borrowed reference. |
| This attacks PyObject_GenericSetAttr(). |
| |
| NB. on my machine this crashes in 2.5 debug but not release. |
| """ |
| |
| class A(object): |
| pass |
| |
| class B(object): |
| def __del__(self): |
| print("hi") |
| del C.d |
| |
| class D(object): |
| def __set__(self, obj, value): |
| self.hello = 42 |
| |
| class C(object): |
| d = D() |
| |
| def g(): |
| pass |
| |
| |
| c = C() |
| a = A() |
| a.cycle = a |
| a.other = B() |
| |
| lst = [None] * 1000000 |
| i = 0 |
| del a |
| while 1: |
| c.d = 42 # segfaults in PyMethod_New(__func__=D.__set__, __self__=d) |
| lst[i] = c.g # consume the free list of instancemethod objects |
| i += 1 |