Antoine Pitrou's patch for bug 2507; exception state lives too long in

3.0.
This commit is contained in:
Barry Warsaw 2008-05-08 04:26:35 +00:00
parent 96de30ae1e
commit 8d109cb043
2 changed files with 42 additions and 2 deletions

View file

@ -1477,6 +1477,19 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
"'finally' pops bad exception");
why = WHY_EXCEPTION;
}
/*
Make sure the exception state is cleaned up before
the end of an except block. This ensures objects
referenced by the exception state are not kept
alive too long.
See #2507.
*/
if (tstate->frame->f_exc_type != NULL)
reset_exc_info(tstate);
else {
assert(tstate->frame->f_exc_value == NULL);
assert(tstate->frame->f_exc_traceback == NULL);
}
Py_DECREF(v);
break;