ensure the attribute name string is initalized before using it (closes #16839)

This commit is contained in:
Benjamin Peterson 2013-01-02 09:36:23 -06:00
parent 5ca88d2b18
commit 6b3f8d375b
2 changed files with 9 additions and 1 deletions

View File

@ -9,6 +9,9 @@ What's New in Python 2.7.4
Core and Builtins
-----------------
- Issue #16839: Fix a segfault when calling unicode() on a classic class early
in interpreter initialization.
- Issue #16761: Calling ``int()`` and ``long()`` with *base* argument only
now raises TypeError.

View File

@ -474,7 +474,7 @@ PyObject_Unicode(PyObject *v)
PyObject *func;
PyObject *str;
int unicode_method_found = 0;
static PyObject *unicodestr;
static PyObject *unicodestr = NULL;
if (v == NULL) {
res = PyString_FromString("<NULL>");
@ -491,6 +491,11 @@ PyObject_Unicode(PyObject *v)
if (PyInstance_Check(v)) {
/* We're an instance of a classic class */
/* Try __unicode__ from the instance -- alas we have no type */
if (!unicodestr) {
unicodestr = PyString_InternFromString("__unicode__");
if (!unicodestr)
return NULL;
}
func = PyObject_GetAttr(v, unicodestr);
if (func != NULL) {
unicode_method_found = 1;