Issue #13546: Fixed an overflow issue that could crash the intepreter when

calling sys.setrecursionlimit((1<<31)-1).

2.7 only.
This commit is contained in:
Amaury Forgeot d'Arc 2011-12-07 21:46:48 +01:00
parent a94b578431
commit 4bf21e28df
3 changed files with 19 additions and 2 deletions

View file

@ -111,9 +111,11 @@ PyErr_GivenExceptionMatches(PyObject *err, PyObject *exc)
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. */
error we have to ignore anyway. Don't do it when the limit
is already insanely high, to avoid overflow */
reclimit = Py_GetRecursionLimit();
Py_SetRecursionLimit(reclimit + 5);
if (reclimit < (1 << 30))
Py_SetRecursionLimit(reclimit + 5);
res = PyObject_IsSubclass(err, exc);
Py_SetRecursionLimit(reclimit);
/* This function must not fail, so print the error here */