diff options
author | Benjamin Peterson <benjamin@python.org> | 2009-04-18 20:50:24 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2009-04-18 20:50:24 (GMT) |
commit | 4585ca9428fbe8cae40566d8642c855b0d24a780 (patch) | |
tree | f27f6082a91865b508ccb81be8077c1c817bb5be | |
parent | 9ea1852fb54b3c5908c59a3fbd1475834b72dc56 (diff) | |
download | cpython-4585ca9428fbe8cae40566d8642c855b0d24a780.zip cpython-4585ca9428fbe8cae40566d8642c855b0d24a780.tar.gz cpython-4585ca9428fbe8cae40566d8642c855b0d24a780.tar.bz2 |
Merged revisions 71722,71725 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r71722 | benjamin.peterson | 2009-04-18 15:12:47 -0500 (Sat, 18 Apr 2009) | 1 line
try to initalize all builtin types with PyType_Ready to avoid problems like #5787
........
r71725 | benjamin.peterson | 2009-04-18 15:25:25 -0500 (Sat, 18 Apr 2009) | 1 line
initalize -> initialize
........
-rw-r--r-- | Lib/test/test_descr.py | 12 | ||||
-rw-r--r-- | Misc/NEWS | 5 | ||||
-rw-r--r-- | Objects/frameobject.c | 8 | ||||
-rw-r--r-- | Objects/object.c | 73 |
4 files changed, 81 insertions, 17 deletions
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index b57e0fa..554e1c8 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -1,3 +1,4 @@ +import __builtin__ import types import unittest import warnings @@ -3838,6 +3839,17 @@ order (MRO) for bases """ else: self.fail("new-style class must have a new-style base") + def test_builtin_bases(self): + # Make sure all the builtin types can have their base queried without + # segfaulting. See issue #5787. + builtin_types = [tp for tp in __builtin__.__dict__.itervalues() + if isinstance(tp, type)] + for tp in builtin_types: + object.__getattribute__(tp, "__bases__") + if tp is not object: + self.assertEqual(len(tp.__bases__), 1, tp) + + def test_mutable_bases_with_failing_mro(self): # Testing mutable bases with failing mro... class WorkOnce(type): @@ -12,9 +12,12 @@ What's New in Python 2.6.3 Core and Builtins ----------------- +- Issue #5787: object.__getattribute__(some_type, "__bases__") segfaulted on + some builtin types. + - Issue #5759: float() didn't call __float__ on str subclasses. -Library +Librar ------- - Issue #5768: Fixed bug in Unicode output logic and test case for same. diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 9a37b62..5b2f308 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -574,14 +574,6 @@ int _PyFrame_Init() builtin_object = PyString_InternFromString("__builtins__"); if (builtin_object == NULL) return 0; - /* - Traceback objects are not created the normal way (through calling the - type), so PyType_Ready has to be called here. - */ - if (PyType_Ready(&PyTraceBack_Type)) { - Py_DECREF(builtin_object); - return 0; - } return 1; } diff --git a/Objects/object.c b/Objects/object.c index e2ec93b..898aa65 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -2022,28 +2022,85 @@ void _Py_ReadyTypes(void) { if (PyType_Ready(&PyType_Type) < 0) - Py_FatalError("Can't initialize 'type'"); + Py_FatalError("Can't initialize type type"); if (PyType_Ready(&_PyWeakref_RefType) < 0) - Py_FatalError("Can't initialize 'weakref'"); + Py_FatalError("Can't initialize weakref type"); if (PyType_Ready(&PyBool_Type) < 0) - Py_FatalError("Can't initialize 'bool'"); + Py_FatalError("Can't initialize bool type"); if (PyType_Ready(&PyString_Type) < 0) - Py_FatalError("Can't initialize 'str'"); + Py_FatalError("Can't initialize str type"); if (PyType_Ready(&PyByteArray_Type) < 0) - Py_FatalError("Can't initialize 'bytes'"); + Py_FatalError("Can't initialize bytearray"); if (PyType_Ready(&PyList_Type) < 0) - Py_FatalError("Can't initialize 'list'"); + Py_FatalError("Can't initialize list"); if (PyType_Ready(&PyNone_Type) < 0) - Py_FatalError("Can't initialize type(None)"); + Py_FatalError("Can't initialize None type"); if (PyType_Ready(&PyNotImplemented_Type) < 0) - Py_FatalError("Can't initialize type(NotImplemented)"); + Py_FatalError("Can't initialize NotImplemented type"); + + if (PyType_Ready(&PyTraceBack_Type) < 0) + Py_FatalError("Can't initialize traceback type"); + + if (PyType_Ready(&PySuper_Type) < 0) + Py_FatalError("Can't initialize super type"); + + if (PyType_Ready(&PyBaseObject_Type) < 0) + Py_FatalError("Can't initialize object type"); + + if (PyType_Ready(&PyRange_Type) < 0) + Py_FatalError("Can't initialize xrange type"); + + if (PyType_Ready(&PyDict_Type) < 0) + Py_FatalError("Can't initialize dict type"); + + if (PyType_Ready(&PySet_Type) < 0) + Py_FatalError("Can't initialize set type"); + + if (PyType_Ready(&PyUnicode_Type) < 0) + Py_FatalError("Can't initialize unicode type"); + + if (PyType_Ready(&PySlice_Type) < 0) + Py_FatalError("Can't initialize slice type"); + + if (PyType_Ready(&PyStaticMethod_Type) < 0) + Py_FatalError("Can't initialize static method type"); + + if (PyType_Ready(&PyComplex_Type) < 0) + Py_FatalError("Can't initalize complex type"); + + if (PyType_Ready(&PyFloat_Type) < 0) + Py_FatalError("Can't initialize float type"); + + if (PyType_Ready(&PyBuffer_Type) < 0) + Py_FatalError("Can't initialize buffer type"); + + if (PyType_Ready(&PyLong_Type) < 0) + Py_FatalError("Can't initialize long type"); + + if (PyType_Ready(&PyInt_Type) < 0) + Py_FatalError("Can't initialize int type"); + + if (PyType_Ready(&PyFrozenSet_Type) < 0) + Py_FatalError("Can't initialize frozenset type"); + + if (PyType_Ready(&PyProperty_Type) < 0) + Py_FatalError("Can't initialize property type"); + + if (PyType_Ready(&PyTuple_Type) < 0) + Py_FatalError("Can't initialize tuple type"); + + if (PyType_Ready(&PyEnum_Type) < 0) + Py_FatalError("Can't initialize enumerate type"); + + if (PyType_Ready(&PyReversed_Type) < 0) + Py_FatalError("Can't initialize reversed type"); } |