summaryrefslogtreecommitdiff
path: root/coverage/tracer.c
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2009-11-22 17:41:47 -0500
committerNed Batchelder <ned@nedbatchelder.com>2009-11-22 17:41:47 -0500
commitfeed6f22c03bb71624e299d16069f49e8a4574d8 (patch)
tree4e9d182cef695e4d7674c89b452e55bde3613300 /coverage/tracer.c
parent7c50d0e40f55efcaac8bae7385a4d834f8299a96 (diff)
downloadpython-coveragepy-git-feed6f22c03bb71624e299d16069f49e8a4574d8.tar.gz
Missed some error handling in the C code.
Diffstat (limited to 'coverage/tracer.c')
-rw-r--r--coverage/tracer.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/coverage/tracer.c b/coverage/tracer.c
index 2ecd187a..eddbc856 100644
--- a/coverage/tracer.c
+++ b/coverage/tracer.c
@@ -243,6 +243,7 @@ Tracer_record_pair(Tracer *self, int l1, int l2)
static int
Tracer_trace(Tracer *self, PyFrameObject *frame, int what, PyObject *arg)
{
+ int ret = 0;
PyObject * filename = NULL;
PyObject * tracename = NULL;
@@ -326,7 +327,10 @@ Tracer_trace(Tracer *self, PyFrameObject *frame, int what, PyObject *arg)
STATS( self->stats.errors++; )
return -1;
}
- PyDict_SetItem(self->should_trace_cache, filename, tracename);
+ if (PyDict_SetItem(self->should_trace_cache, filename, tracename) < 0) {
+ STATS( self->stats.errors++; )
+ return -1;
+ }
}
else {
Py_INCREF(tracename);
@@ -341,8 +345,12 @@ Tracer_trace(Tracer *self, PyFrameObject *frame, int what, PyObject *arg)
STATS( self->stats.errors++; )
return -1;
}
- PyDict_SetItem(self->data, tracename, file_data);
+ ret = PyDict_SetItem(self->data, tracename, file_data);
Py_DECREF(file_data);
+ if (ret < 0) {
+ STATS( self->stats.errors++; )
+ return -1;
+ }
}
self->cur_file_data = file_data;
SHOWLOG(self->depth, frame->f_lineno, filename, "traced");
@@ -389,8 +397,16 @@ Tracer_trace(Tracer *self, PyFrameObject *frame, int what, PyObject *arg)
else {
/* Tracing lines: key is simply this_line. */
PyObject * this_line = MyInt_FromLong(frame->f_lineno);
- PyDict_SetItem(self->cur_file_data, this_line, Py_None);
+ if (this_line == NULL) {
+ STATS( self->stats.errors++; )
+ return -1;
+ }
+ ret = PyDict_SetItem(self->cur_file_data, this_line, Py_None);
Py_DECREF(this_line);
+ if (ret < 0) {
+ STATS( self->stats.errors++; )
+ return -1;
+ }
}
}
self->last_line = frame->f_lineno;