All Downloads are FREE. Search and download functionalities are using the official Maven repository.

lib-python.2.7.test.crashers.gc_has_finalizer.py Maven / Gradle / Ivy

Go to download

Jython is an implementation of the high-level, dynamic, object-oriented language Python written in 100% Pure Java, and seamlessly integrated with the Java platform. It thus allows you to run Python on any Java platform.

The newest version!
"""
The gc module can still invoke arbitrary Python code and crash.
This is an attack against _PyInstance_Lookup(), which is documented
as follows:

    The point of this routine is that it never calls arbitrary Python
    code, so is always "safe":  all it does is dict lookups.

But of course dict lookups can call arbitrary Python code.
The following code causes mutation of the object graph during
the call to has_finalizer() in gcmodule.c, and that might
segfault.
"""

import gc


class A:
    def __hash__(self):
        return hash("__del__")
    def __eq__(self, other):
        del self.other
        return False

a = A()
b = A()

a.__dict__[b] = 'A'

a.other = b
b.other = a

gc.collect()
del a, b

gc.collect()




© 2015 - 2025 Weber Informatics LLC | Privacy Policy