]> granicus.if.org Git - python/commitdiff
Merged revisions 71722 via svnmerge from
authorBenjamin Peterson <benjamin@python.org>
Sat, 18 Apr 2009 20:54:08 +0000 (20:54 +0000)
committerBenjamin Peterson <benjamin@python.org>
Sat, 18 Apr 2009 20:54:08 +0000 (20:54 +0000)
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
........

Lib/test/test_descr.py
Misc/NEWS
Objects/frameobject.c
Objects/object.c

index 6dba040f49b945e612f91995be89f30784b23df8..407959d75ba65ab49761c3f93093f9a0de1fd66b 100644 (file)
@@ -1,3 +1,4 @@
+import builtins
 import types
 import unittest
 import warnings
@@ -3586,6 +3587,17 @@ order (MRO) for bases """
         else:
             self.fail("shouldn't be able to create inheritance cycles")
 
+    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 builtins.__dict__.values()
+                         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):
index e230d82ffc54617b8b8fd299422934dceb055b93..d7ee7b3d3117f0c99013abb317d64527cf650a4a 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -17,6 +17,9 @@ Core and Builtins
   from Python/dtoa.c.  As a consequence, (e.g.) round(x, 2) now
   consistently agrees with format(x, '.2f').
 
+- Issue #5787: object.__getattribute__(some_type, "__bases__") segfaulted on
+  some builtin types.
+
 - Issue #5772: format(1e100, '<') produces '1e+100', not '1.0e+100'.
 
 - Issue #5515: str.format() type 'n' combined with commas and leading
index 52898ccb023373f66b0edd491c9af1f069d05971..e29c64742c0bc3f924964a36d6c6a9b9e5118b63 100644 (file)
@@ -577,7 +577,9 @@ static PyObject *builtin_object;
 int _PyFrame_Init()
 {
        builtin_object = PyUnicode_InternFromString("__builtins__");
-       return (builtin_object != NULL);
+       if (builtin_object == NULL)
+               return 0;
+       return 1;
 }
 
 PyFrameObject *
index 14cacb3b84dd7f59d3da1e1b0fa3cebdd2638644..1975f141ee77b5c1c61c747e9e4b45bfd8d060d8 100644 (file)
@@ -1479,31 +1479,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(&PyByteArray_Type) < 0)
-               Py_FatalError("Can't initialize 'bytes'");
+               Py_FatalError("Can't initialize bytearray");
 
        if (PyType_Ready(&PyBytes_Type) < 0)
                Py_FatalError("Can't initialize 'str'");
 
        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(Py_Ellipsis->ob_type) < 0)
                Py_FatalError("Can't initialize type(Ellipsis)");
 
        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 range 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 str 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 initialize complex type");
+
+       if (PyType_Ready(&PyFloat_Type) < 0)
+               Py_FatalError("Can't initialize float type");
+
+       if (PyType_Ready(&PyLong_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(&PyMemoryView_Type) < 0)
+               Py_FatalError("Can't initialize memoryview 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");
 
        if (PyType_Ready(&PyCode_Type) < 0)
                Py_FatalError("Can't initialize 'code'");