diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2015-02-15 15:06:13 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2015-02-15 15:06:13 -0500 |
commit | 80036ce3f4b82b3911e10b7d28226048dc8a56c0 (patch) | |
tree | ee53a98f51a9dddd8a46f5ddd1cb88dd760ff63d /coverage/tracer.c | |
parent | e25a505dfece0b60c22ea871796d7159a300d771 (diff) | |
download | python-coveragepy-git-80036ce3f4b82b3911e10b7d28226048dc8a56c0.tar.gz |
Protect against misbehaving plugins.
Also, test some misbehavior, and move our own annotations of plugins
into prefixed attributes.
Diffstat (limited to 'coverage/tracer.c')
-rw-r--r-- | coverage/tracer.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/coverage/tracer.c b/coverage/tracer.c index 102c474e..a31340fc 100644 --- a/coverage/tracer.c +++ b/coverage/tracer.c @@ -530,6 +530,9 @@ CTracer_trace(CTracer *self, PyFrameObject *frame, int what, PyObject *arg_unuse disp_file_tracer, "dynamic_source_filename", "OO", tracename, frame ); + if (next_tracename == NULL) { + goto error; + } Py_DECREF(tracename); tracename = next_tracename; @@ -577,7 +580,7 @@ CTracer_trace(CTracer *self, PyFrameObject *frame, int what, PyObject *arg_unuse /* If the disposition mentions a plugin, record that. */ if (disp_file_tracer != Py_None) { - disp_plugin_name = PyObject_GetAttrString(disp_file_tracer, "plugin_name"); + disp_plugin_name = PyObject_GetAttrString(disp_file_tracer, "_coverage_plugin_name"); if (disp_plugin_name == NULL) { goto error; } @@ -702,12 +705,13 @@ CTracer_trace(CTracer *self, PyFrameObject *frame, int what, PyObject *arg_unuse } ret = RET_OK; - goto ok; + goto cleanup; error: STATS( self->stats.errors++; ) -ok: +cleanup: + Py_XDECREF(tracename); Py_XDECREF(disposition); Py_XDECREF(disp_trace); |