diff options
author | Barry Warsaw <barry@python.org> | 1999-09-08 16:26:33 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 1999-09-08 16:26:33 (GMT) |
commit | f6202635f9fd0fc55308e15600adfe3d1bc1e97f (patch) | |
tree | baa45349810c1982b341a5dd7a4d518237f626ab /Python | |
parent | 71eb8644d7e27fd379a2cf78c509155bdb179332 (diff) | |
download | cpython-f6202635f9fd0fc55308e15600adfe3d1bc1e97f.zip cpython-f6202635f9fd0fc55308e15600adfe3d1bc1e97f.tar.gz cpython-f6202635f9fd0fc55308e15600adfe3d1bc1e97f.tar.bz2 |
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.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/ceval.c | 8 |
1 files changed, 8 insertions, 0 deletions
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 { |