Meador Inge <mead...@gmail.com> added the comment: I can reproduce the segfault on F16:
Python 3.3.0a0 (default:3828d93fd330, Feb 23 2012, 13:49:57) [GCC 4.4.6] on linux Type "help", "copyright", "credits" or "license" for more information. >>> d = {'__qualname__':'XXX'} [66934 refs] >>> T = type('foo', (), d) [66956 refs] >>> T python: Objects/unicodeobject.c:301: _PyUnicode_CheckConsistency: Assertion `((((((PyObject*)(op))->ob_type))->tp_flags & ((1L<<28))) != 0)' failed. Aborted (core dumped) The patch looks mostly OK, but I can still segfault the interpreter by using a '__qualname__' of 'None': Python 3.3.0a0 (default:3828d93fd330+, Feb 23 2012, 13:55:57) [GCC 4.4.6] on linux Type "help", "copyright", "credits" or "license" for more information. >>> d = {'__qualname__':'XXX'} [67128 refs] >>> T = type('foo', (), d) [67156 refs] >>> T <class '__main__.XXX'> [67161 refs] >>> d = {'__qualname__': None} [67161 refs] >>> T = type('foo', (), d) [67185 refs] >>> T python: Objects/unicodeobject.c:301: _PyUnicode_CheckConsistency: Assertion `((((((PyObject*)(op))->ob_type))->tp_flags & ((1L<<28))) != 0)' failed. Aborted (core dumped) Try this additional unit test: d = {'__qualname__': None} tp = type('foo', (), d) self.assertEqual(tp.__qualname__, None) self.assertEqual(tp.__dict__['__qualname__'], None) self.assertEqual(d, {'__qualname__': None}) self.assertTrue(repr(tp)) ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue14095> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com