Commit b4b5a760 authored by Armin Rigo's avatar Armin Rigo

collected my segfaulting Python examples from the SF trackers

(is the purpose of the crashers directory to scare people? :-)
parent f60cd47f
# http://python.org/sf/1174712
import types
class X(types.ModuleType, str):
"""Such a subclassing is incorrectly allowed --
see the SF bug report for explanations"""
if __name__ == '__main__':
X('name') # segfault: ModuleType.__init__() reads
# the dict at the wrong offset
# http://python.org/sf/1202533
import new, operator
class A:
pass
A.__mul__ = new.instancemethod(operator.mul, None, A)
if __name__ == '__main__':
A()*2 # segfault: infinite recursion in C
# http://python.org/sf/1202533
class A(str):
__get__ = getattr
if __name__ == '__main__':
a = A('a')
A.a = a
a.a # segfault: infinite recursion in C
# http://python.org/sf/1202533
class A(object):
pass
A.__call__ = A()
if __name__ == '__main__':
A()() # segfault: infinite recursion in C
# http://python.org/sf/1202533
if __name__ == '__main__':
lst = [apply]
lst.append(lst)
apply(*lst) # segfault: infinite recursion in C
# http://python.org/sf/1267884
import types
class C:
__str__ = types.InstanceType.__str__
if __name__ == '__main__':
str(C()) # segfault: infinite recursion in C
# http://python.org/sf/1303614
class Strange(object):
def __hash__(self):
return hash('hello')
def __eq__(self, other):
x.__dict__ = {} # the old x.__dict__ is deallocated
return False
class X(object):
pass
if __name__ == '__main__':
v = 123
x = X()
x.__dict__ = {Strange(): 42,
'hello': v+456}
x.hello # segfault: the above dict is accessed after it's deallocated
# http://python.org/sf/1303614
class Y(object):
pass
class type_with_modifiable_dict(Y, type):
pass
class MyClass(object):
"""This class has its __dict__ attribute completely exposed:
user code can read, reassign and even delete it.
"""
__metaclass__ = type_with_modifiable_dict
if __name__ == '__main__':
del MyClass.__dict__ # if we set tp_dict to NULL,
print MyClass # doing anything with MyClass segfaults
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment