summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2003-02-19 03:19:29 (GMT)
committerGuido van Rossum <guido@python.org>2003-02-19 03:19:29 (GMT)
commit90195e2616288d6dfdb9a081edaab684fd59ef7e (patch)
tree14d9ea31446583d2e3cd2bf6e92d1208301adb45 /Objects
parent3b5de4db92db06dbd9a32826fdbdb751f3e5054f (diff)
downloadcpython-90195e2616288d6dfdb9a081edaab684fd59ef7e.zip
cpython-90195e2616288d6dfdb9a081edaab684fd59ef7e.tar.gz
cpython-90195e2616288d6dfdb9a081edaab684fd59ef7e.tar.bz2
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! Will backport to 2.2.
Diffstat (limited to 'Objects')
-rw-r--r--Objects/object.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/Objects/object.c b/Objects/object.c
index 10877b5..bf8056c 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -1362,7 +1362,8 @@ PyObject_GenericGetAttr(PyObject *obj, PyObject *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);
@@ -1454,7 +1455,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);