PyErr_NormalizeException may not set an error, so convert the PyErr_SetObject

call on hitting the recursion limit into just assigning it to the arguments provided.
This commit is contained in:
Georg Brandl 2009-04-02 18:09:04 +00:00
parent dd98e04c57
commit d3f03fa715
2 changed files with 12 additions and 1 deletions

View File

@ -12,6 +12,9 @@ What's New in Python 2.7 alpha 1
Core and Builtins
-----------------
- Fix a problem in PyErr_NormalizeException that leads to "undetected errors"
when hitting the recursion limit under certain circumstances.
- Issue #1665206: Remove the last eager import in _warnings.c and make it lazy.
- Issue #4865: On MacOSX /Library/Python/2.7/site-packages is added to

View File

@ -225,7 +225,15 @@ finally:
tstate = PyThreadState_GET();
if (++tstate->recursion_depth > Py_GetRecursionLimit()) {
--tstate->recursion_depth;
PyErr_SetObject(PyExc_RuntimeError, PyExc_RecursionErrorInst);
/* throw away the old exception... */
Py_DECREF(*exc);
Py_DECREF(*val);
/* ... and use the recursion error instead */
*exc = PyExc_RuntimeError;
*val = PyExc_RecursionErrorInst;
Py_INCREF(*exc);
Py_INCREF(*val);
/* just keeping the old traceback */
return;
}
PyErr_NormalizeException(exc, val, tb);