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

lib-python.2.7.test.crashers.decref_before_assignment.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!
"""
General example for an attack against code like this:

    Py_DECREF(obj->attr); obj->attr = ...;

here in Module/_json.c:scanner_init().

Explanation: if the first Py_DECREF() calls either a __del__ or a
weakref callback, it will run while the 'obj' appears to have in
'obj->attr' still the old reference to the object, but not holding
the reference count any more.

Status: progress has been made replacing these cases, but there is an
infinite number of such cases.
"""

import _json, weakref

class Ctx1(object):
    encoding = "utf8"
    strict = None
    object_hook = None
    object_pairs_hook = None
    parse_float = None
    parse_int = None
    parse_constant = None

class Foo(unicode):
    pass

def delete_me(*args):
    print scanner.encoding.__dict__

class Ctx2(Ctx1):
    @property
    def encoding(self):
        global wref
        f = Foo("utf8")
        f.abc = globals()
        wref = weakref.ref(f, delete_me)
        return f

scanner = _json.make_scanner(Ctx1())
scanner.__init__(Ctx2())




© 2015 - 2025 Weber Informatics LLC | Privacy Policy