[Python-checkins] r71730 - in python/branches/release30-maint: Lib/test/test_descr.py Misc/NEWS Objects/frameobject.c Objects/object.c

benjamin.peterson python-checkins at python.org
Sat Apr 18 23:10:50 CEST 2009


Author: benjamin.peterson
Date: Sat Apr 18 23:10:48 2009
New Revision: 71730
Log:
Merged revisions 71727 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/branches/py3k
................
 r71727 | benjamin.peterson | 2009年04月18日 15:54:08 -0500 (2009年4月18日) | 9 lines
 
 Merged revisions 71722 via svnmerge from 
 svn+ssh://pythondev@svn.python.org/python/trunk
 
 ........
 r71722 | benjamin.peterson | 2009年04月18日 15:12:47 -0500 (2009年4月18日) | 1 line
 
 try to initalize all builtin types with PyType_Ready to avoid problems like #5787
 ........
................
Modified:
 python/branches/release30-maint/ (props changed)
 python/branches/release30-maint/Lib/test/test_descr.py
 python/branches/release30-maint/Misc/NEWS
 python/branches/release30-maint/Objects/frameobject.c
 python/branches/release30-maint/Objects/object.c
Modified: python/branches/release30-maint/Lib/test/test_descr.py
==============================================================================
--- python/branches/release30-maint/Lib/test/test_descr.py	(original)
+++ python/branches/release30-maint/Lib/test/test_descr.py	Sat Apr 18 23:10:48 2009
@@ -1,3 +1,4 @@
+import builtins
 import types
 import unittest
 import warnings
@@ -3538,6 +3539,17 @@
 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):
Modified: python/branches/release30-maint/Misc/NEWS
==============================================================================
--- python/branches/release30-maint/Misc/NEWS	(original)
+++ python/branches/release30-maint/Misc/NEWS	Sat Apr 18 23:10:48 2009
@@ -18,6 +18,9 @@
 
 - Issue #5759: float() didn't call __float__ on str subclasses.
 
+- Issue #5787: object.__getattribute__(some_type, "__bases__") segfaulted on
+ some builtin types.
+
 - Issue #5392: when a very low recursion limit was set, the interpreter would
 abort with a fatal error after the recursion limit was hit twice.
 
Modified: python/branches/release30-maint/Objects/frameobject.c
==============================================================================
--- python/branches/release30-maint/Objects/frameobject.c	(original)
+++ python/branches/release30-maint/Objects/frameobject.c	Sat Apr 18 23:10:48 2009
@@ -577,7 +577,9 @@
 int _PyFrame_Init()
 {
 	builtin_object = PyUnicode_InternFromString("__builtins__");
-	return (builtin_object != NULL);
+	if (builtin_object == NULL)
+		return 0;
+	return 1;
 }
 
 PyFrameObject *
Modified: python/branches/release30-maint/Objects/object.c
==============================================================================
--- python/branches/release30-maint/Objects/object.c	(original)
+++ python/branches/release30-maint/Objects/object.c	Sat Apr 18 23:10:48 2009
@@ -1462,31 +1462,85 @@
 _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'");


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /