Bug report
Bug description:
take_ownership clears any MemoryError exceptions when getting the previous frame fails (even if they were not raised by the call to _PyFrame_GetFrameObject):
|
PyFrameObject *back = _PyFrame_GetFrameObject(prev); |
|
if (back == NULL) { |
|
/* Memory error here. */ |
|
assert(PyErr_ExceptionMatches(PyExc_MemoryError)); |
|
/* Nothing we can do about it */ |
|
PyErr_Clear(); |
I think we should save and restore the exception around the call to _PyFrame_GetFrameObject(prev). Something like:
PyObject *exc = PyErr_GetRaisedException();
PyFrameObject *back = _PyFrame_GetFrameObject(prev);
if (back == NULL) {
/* Memory error here. */
assert(PyErr_ExceptionMatches(PyExc_MemoryError));
/* Nothing we can do about it */
PyErr_Clear();
}
else {
f->f_back = (PyFrameObject *)Py_NewRef(back);
}
PyErr_SetRaisedException(exc);
CPython versions tested on:
3.14, CPython main branch
Operating systems tested on:
No response
Linked PRs
Bug report
Bug description:
take_ownershipclears any MemoryError exceptions when getting the previous frame fails (even if they were not raised by the call to _PyFrame_GetFrameObject):cpython/Python/frame.c
Lines 74 to 79 in 1e4a434
I think we should save and restore the exception around the call to
_PyFrame_GetFrameObject(prev). Something like:CPython versions tested on:
3.14, CPython main branch
Operating systems tested on:
No response
Linked PRs