diff options
Diffstat (limited to 'Python/errors.c')
| -rw-r--r-- | Python/errors.c | 8 | 
1 files changed, 7 insertions, 1 deletions
diff --git a/Python/errors.c b/Python/errors.c index c88a190..02e9572 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -106,10 +106,16 @@ PyErr_GivenExceptionMatches(PyObject *err, PyObject *exc)  		err = PyExceptionInstance_Class(err);  	if (PyExceptionClass_Check(err) && PyExceptionClass_Check(exc)) { -		int res = 0; +		int res = 0, reclimit;  		PyObject *exception, *value, *tb;  		PyErr_Fetch(&exception, &value, &tb); +		/* Temporarily bump the recursion limit, so that in the most +		   common case PyObject_IsSubclass will not raise a recursion +		   error we have to ignore anyway. */ +		reclimit = Py_GetRecursionLimit(); +		Py_SetRecursionLimit(reclimit + 5);  		res = PyObject_IsSubclass(err, exc); +		Py_SetRecursionLimit(reclimit);  		/* This function must not fail, so print the error here */  		if (res == -1) {  			PyErr_WriteUnraisable(err);  | 
