From f6202635f9fd0fc55308e15600adfe3d1bc1e97f Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Wed, 8 Sep 1999 16:26:33 +0000 Subject: call_trace(): A fix for PR#73, if an exception occurred in the tracefunc (or profilefunc -- we're not sure which), zap the global trace and profile funcs so that we can't get into recursive loop when instantiating the resulting class based exception. --- Python/ceval.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Python/ceval.c b/Python/ceval.c index 1c51ccf..4c1bf2f 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -2201,6 +2201,14 @@ call_trace(p_trace, p_newtrace, f, msg, arg) Py_XDECREF(*p_newtrace); *p_newtrace = NULL; } + /* to be extra double plus sure we don't get recursive + * calls inf either tracefunc or profilefunc gets an + * exception, zap the global variables. + */ + Py_XDECREF(tstate->sys_tracefunc); + tstate->sys_tracefunc = NULL; + Py_XDECREF(tstate->sys_profilefunc); + tstate->sys_profilefunc = NULL; return -1; } else { -- cgit v0.12