| """ |
| _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(im_func=D.__set__, im_self=d) |
| lst[i] = c.g # consume the free list of instancemethod objects |
| i += 1 |