summaryrefslogtreecommitdiff
path: root/coverage/tracer.c
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2015-02-15 15:06:13 -0500
committerNed Batchelder <ned@nedbatchelder.com>2015-02-15 15:06:13 -0500
commit80036ce3f4b82b3911e10b7d28226048dc8a56c0 (patch)
treeee53a98f51a9dddd8a46f5ddd1cb88dd760ff63d /coverage/tracer.c
parente25a505dfece0b60c22ea871796d7159a300d771 (diff)
downloadpython-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.c10
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);