Merged revisions 71024,71058 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r71024 | georg.brandl | 2009-04-02 04:47:44 +0200 (Do, 02 Apr 2009) | 4 lines

  In PyErr_GivenExceptionMatches, 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.
........
  r71058 | georg.brandl | 2009-04-02 20:09:04 +0200 (Do, 02 Apr 2009) | 3 lines

  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-11 21:24:37 +00:00
parent 3f96a87902
commit 406b3d89e2
2 changed files with 12 additions and 1 deletions

View File

@ -47,6 +47,9 @@ Core and Builtins
- Issue #5499: The 'c' code for argument parsing functions now only accepts a
byte, and the 'C' code only accepts a unicode character.
- 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.
- Fix a segfault when running test_exceptions with coverage, caused by

View File

@ -279,7 +279,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);