[Python-checkins] python/dist/src/Objects object.c,2.162.6.9,2.162.6.10

gvanrossum@users.sourceforge.net gvanrossum@users.sourceforge.net
Tue, 18 Feb 2003 19:21:23 -0800


Update of /cvsroot/python/python/dist/src/Objects
In directory sc8-pr-cvs1:/tmp/cvs-serv30436

Modified Files:
      Tag: release22-maint
	object.c 
Log Message:
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!


Index: object.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/object.c,v
retrieving revision 2.162.6.9
retrieving revision 2.162.6.10
diff -C2 -d -r2.162.6.9 -r2.162.6.10
*** object.c	13 Jan 2003 20:17:04 -0000	2.162.6.9
--- object.c	19 Feb 2003 03:21:21 -0000	2.162.6.10
***************
*** 1260,1264 ****
  	descr = _PyType_Lookup(tp, name);
  	f = NULL;
! 	if (descr != NULL) {
  		f = descr->ob_type->tp_descr_get;
  		if (f != NULL && PyDescr_IsData(descr)) {
--- 1260,1265 ----
  	descr = _PyType_Lookup(tp, name);
  	f = 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)) {
***************
*** 1334,1338 ****
  	descr = _PyType_Lookup(tp, name);
  	f = NULL;
! 	if (descr != NULL) {
  		f = descr->ob_type->tp_descr_set;
  		if (f != NULL && PyDescr_IsData(descr)) {
--- 1335,1340 ----
  	descr = _PyType_Lookup(tp, name);
  	f = 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)) {