From: Guido van Rossum Date: Wed, 19 Feb 2003 03:21:21 +0000 (+0000) Subject: Backport of rev 2.199 from trunk. X-Git-Tag: v2.2.3c1~135 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2f3fe91ddce75a6f1a461506796e396f2fc225e5;p=thirdparty%2FPython%2Fcpython.git Backport of rev 2.199 from trunk. PyObject_Generic{Get,Set}Attr: Don't access tp_descr_{get,set} of a descriptor without checking the flag bits of the descriptor's type. While we know that the main type (the type of the object whose attribute is being accessed) has all the right flag bits (or else PyObject_Generic{Get,Set}Attr wouldn't be called), we don't know that for its class attributes! --- diff --git a/Objects/object.c b/Objects/object.c index 893be733cac7..673af1fedea7 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -1259,7 +1259,8 @@ PyObject_GenericGetAttr(PyObject *obj, PyObject *name) descr = _PyType_Lookup(tp, name); f = NULL; - if (descr != NULL) { + if (descr != NULL && + PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) { f = descr->ob_type->tp_descr_get; if (f != NULL && PyDescr_IsData(descr)) { res = f(descr, obj, (PyObject *)obj->ob_type); @@ -1333,7 +1334,8 @@ PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value) descr = _PyType_Lookup(tp, name); f = NULL; - if (descr != NULL) { + if (descr != NULL && + PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) { f = descr->ob_type->tp_descr_set; if (f != NULL && PyDescr_IsData(descr)) { res = f(descr, obj, value);