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:
parent
dd98e04c57
commit
d3f03fa715
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue