cpython: c5e6f997730e (original) (raw)

Mercurial > cpython

changeset 69741:c5e6f997730e 3.1

Issue #9756: When calling a method descriptor or a slot wrapper descriptor, the check of the object type doesn't read the __class__ attribute anymore. Fix a crash if a class override its __class__ attribute (e.g. a proxy of the str type). [#9756]

Victor Stinner victor.stinner@haypocalc.com
date Sun, 01 May 2011 23:19:15 +0200
parents c57fdce01eb8
children 4fc04f6a0731 0db11682ea45
files Lib/test/test_descr.py Misc/NEWS Objects/descrobject.c
diffstat 3 files changed, 27 insertions(+), 3 deletions(-)[+] [-] Lib/test/test_descr.py 16 Misc/NEWS 5 Objects/descrobject.c 9

line wrap: on

line diff

--- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -4235,6 +4235,22 @@ order (MRO) for bases """ with self.assertRaises(AttributeError): del X.abstractmethods

+

+

+

+ class DictProxyTests(unittest.TestCase): def setUp(self):

--- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,11 @@ What's New in Python 3.1.4? Core and Builtins ----------------- +- Issue #9756: When calling a method descriptor or a slot wrapper descriptor,

--- a/Objects/descrobject.c +++ b/Objects/descrobject.c @@ -226,7 +226,8 @@ methoddescr_call(PyMethodDescrObject *de return NULL; } self = PyTuple_GET_ITEM(args, 0);

@@ -284,7 +285,8 @@ wrapperdescr_call(PyWrapperDescrObject * return NULL; } self = PyTuple_GET_ITEM(args, 0);

@@ -1065,7 +1067,8 @@ PyWrapper_New(PyObject *d, PyObject *sel assert(PyObject_TypeCheck(d, &PyWrapperDescr_Type)); descr = (PyWrapperDescrObject *)d;

wp = PyObject_GC_New(wrapperobject, &wrappertype); if (wp != NULL) {