As I threatened on python-dev, add a directory which contains all known

bugs which cause the interpreter to crash.  I'm sure we can find a few
more.  Many missing bugs deal with variations on unchecked infinite recursion
(like coerce.py).
This commit is contained in:
Neal Norwitz 2006-01-10 07:49:41 +00:00
parent 88bbd73d07
commit 8cc4ef561c
4 changed files with 97 additions and 0 deletions

15
Lib/test/crashers/README Normal file
View File

@ -0,0 +1,15 @@
This directory only contains tests for outstanding bugs that cause
the interpreter to segfault. Ideally this directory should always
be empty. Sometimes it may not be easy to fix the underlying cause.
Each test should fail when run from the command line:
./python Lib/test/crashers/weakref_in_del.py
Each test should have a link to the bug report:
# http://python.org/sf/BUG#
Put as much info into a docstring or comments to help determine
the cause of the failure. Particularly note if the cause is
system or environment dependent and what the variables are.

View File

@ -0,0 +1,9 @@
# http://python.org/sf/992017
class foo:
def __coerce__(self, other):
return other, self
if __name__ == '__main__':
foo()+1 # segfault: infinite recursion in C

View File

@ -0,0 +1,17 @@
import weakref
# http://python.org/sf/1377858
ref = None
def test_weakref_in_del():
class Target(object):
def __del__(self):
global ref
ref = weakref.ref(self)
w = Target()
if __name__ == '__main__':
test_weakref_in_del()

View File

@ -0,0 +1,56 @@
from xml.parsers import expat
# http://python.org/sf/1296433
def test_parse_only_xml_data():
#
xml = "<?xml version='1.0' encoding='iso8859'?><s>%s</s>" % ('a' * 1025)
# this one doesn't crash
#xml = "<?xml version='1.0'?><s>%s</s>" % ('a' * 10000)
def handler(text):
raise Exception
parser = expat.ParserCreate()
parser.CharacterDataHandler = handler
try:
parser.Parse(xml)
except:
pass
if __name__ == '__main__':
test_parse_only_xml_data()
# Invalid read of size 4
# at 0x43F936: PyObject_Free (obmalloc.c:735)
# by 0x45A7C7: unicode_dealloc (unicodeobject.c:246)
# by 0x1299021D: PyUnknownEncodingHandler (pyexpat.c:1314)
# by 0x12993A66: processXmlDecl (xmlparse.c:3330)
# by 0x12999211: doProlog (xmlparse.c:3678)
# by 0x1299C3F0: prologInitProcessor (xmlparse.c:3550)
# by 0x12991EA3: XML_ParseBuffer (xmlparse.c:1562)
# by 0x1298F8EC: xmlparse_Parse (pyexpat.c:895)
# by 0x47B3A1: PyEval_EvalFrameEx (ceval.c:3565)
# by 0x47CCAC: PyEval_EvalCodeEx (ceval.c:2739)
# by 0x47CDE1: PyEval_EvalCode (ceval.c:490)
# by 0x499820: PyRun_SimpleFileExFlags (pythonrun.c:1198)
# by 0x4117F1: Py_Main (main.c:492)
# by 0x12476D1F: __libc_start_main (in /lib/libc-2.3.5.so)
# by 0x410DC9: (within /home/neal/build/python/svn/clean/python)
# Address 0x12704020 is 264 bytes inside a block of size 592 free'd
# at 0x11B1BA8A: free (vg_replace_malloc.c:235)
# by 0x124B5F18: (within /lib/libc-2.3.5.so)
# by 0x48DE43: find_module (import.c:1320)
# by 0x48E997: import_submodule (import.c:2249)
# by 0x48EC15: load_next (import.c:2083)
# by 0x48F091: import_module_ex (import.c:1914)
# by 0x48F385: PyImport_ImportModuleEx (import.c:1955)
# by 0x46D070: builtin___import__ (bltinmodule.c:44)
# by 0x4186CF: PyObject_Call (abstract.c:1777)
# by 0x474E9B: PyEval_CallObjectWithKeywords (ceval.c:3432)
# by 0x47928E: PyEval_EvalFrameEx (ceval.c:2038)
# by 0x47CCAC: PyEval_EvalCodeEx (ceval.c:2739)
# by 0x47CDE1: PyEval_EvalCode (ceval.c:490)
# by 0x48D0F7: PyImport_ExecCodeModuleEx (import.c:635)
# by 0x48D4F4: load_source_module (import.c:913)