From b65c65b301203b2acb0b8e1b2f45d8b5079ce5fd Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 3 Jun 2002 19:52:41 +0000 Subject: [PATCH] Address the residual issue with the fix for SF 551412 in _PyType_Lookup(). Decided to clear the error condition in the unfortunate but unlikely case that PyType_Ready() fails. Will fix in 2.2.x too. --- Objects/typeobject.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Objects/typeobject.c b/Objects/typeobject.c index af133eadc2..dd6f1b5d5c 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1222,8 +1222,18 @@ _PyType_Lookup(PyTypeObject *type, PyObject *name) /* Look in tp_dict of types in MRO */ mro = type->tp_mro; if (mro == NULL) { - if (PyType_Ready(type) < 0) + if (PyType_Ready(type) < 0) { + /* It's not ideal to clear the error condition, + but this function is documented as not setting + an exception, and I don't want to change that. + When PyType_Ready() can't proceed, it won't + set the "ready" flag, so future attempts to ready + the same type will call it again -- hopefully + in a context that propagates the exception out. + */ + PyErr_Clear(); return NULL; + } mro = type->tp_mro; assert(mro != NULL); } -- 2.50.1