diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2010-03-21 21:07:44 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2010-03-21 21:07:44 (GMT) |
commit | 7f045cfba347106e02f4b61623eb2ce6686ebf67 (patch) | |
tree | 9cb0e7699e81fc77c80291ca4ac645daa68d4c7d /Objects | |
parent | 38c36f857600c72a094c65010d51342a1fd73658 (diff) | |
download | cpython-7f045cfba347106e02f4b61623eb2ce6686ebf67.zip cpython-7f045cfba347106e02f4b61623eb2ce6686ebf67.tar.gz cpython-7f045cfba347106e02f4b61623eb2ce6686ebf67.tar.bz2 |
Merged revisions 78876 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r78876 | victor.stinner | 2010-03-12 18:17:58 +0100 (ven., 12 mars 2010) | 3 lines
Issue #6697: catch _PyUnicode_AsString() errors in getattr() and setattr()
builtin functions.
........
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/object.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/Objects/object.c b/Objects/object.c index 3a6db18..eba061b 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -797,8 +797,12 @@ PyObject_GetAttr(PyObject *v, PyObject *name) } if (tp->tp_getattro != NULL) return (*tp->tp_getattro)(v, name); - if (tp->tp_getattr != NULL) - return (*tp->tp_getattr)(v, _PyUnicode_AsString(name)); + if (tp->tp_getattr != NULL) { + char *name_str = _PyUnicode_AsString(name); + if (name_str == NULL) + return NULL; + return (*tp->tp_getattr)(v, name_str); + } PyErr_Format(PyExc_AttributeError, "'%.50s' object has no attribute '%U'", tp->tp_name, name); @@ -838,7 +842,10 @@ PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value) return err; } if (tp->tp_setattr != NULL) { - err = (*tp->tp_setattr)(v, _PyUnicode_AsString(name), value); + char *name_str = _PyUnicode_AsString(name); + if (name_str == NULL) + return -1; + err = (*tp->tp_setattr)(v, name_str, value); Py_DECREF(name); return err; } @@ -1017,8 +1024,8 @@ PyObject_GenericGetAttr(PyObject *obj, PyObject *name) } PyErr_Format(PyExc_AttributeError, - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, _PyUnicode_AsString(name)); + "'%.50s' object has no attribute '%U'", + tp->tp_name, name); done: Py_DECREF(name); return res; |