From 5991f6522a83ef331390c22a6d5a802a16abbb4c Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 3 Jun 2002 19:54:10 +0000 Subject: [PATCH] Backport to 2.2.x: 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. --- Objects/typeobject.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Objects/typeobject.c b/Objects/typeobject.c index f5a1a01a49af..c2264541cec8 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1219,8 +1219,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.47.3