X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fpyvalues.c;h=44176014fc27dc68de218f00acf6c2e8bf8560d7;hb=40aabf444e124f40603021821e98bcc40c4aaa0e;hp=4f5c4ce3ac41eb46f3172e5d8b0cee89a5d50b37;hpb=2421812ea47269c50920414a6e3c32448800120f;p=collectd.git diff --git a/src/pyvalues.c b/src/pyvalues.c index 4f5c4ce3..44176014 100644 --- a/src/pyvalues.c +++ b/src/pyvalues.c @@ -427,10 +427,11 @@ static meta_data_t *cpy_build_meta(PyObject *meta) { cpy_log_exception("building meta data"); return NULL; } - s = PyList_Size(l); - if (s < 0) + if (s <= 0) { + Py_XDECREF(l); return NULL; + } m = meta_data_create(); for (i = 0; i < s; ++i) { @@ -501,9 +502,9 @@ static meta_data_t *cpy_build_meta(PyObject *meta) { } static PyObject *Values_dispatch(Values *self, PyObject *args, PyObject *kwds) { - int i, ret; + int ret; const data_set_t *ds; - int size; + size_t size, i; value_t *value; value_list_t value_list = VALUE_LIST_INIT; PyObject *values = self->values, *meta = self->meta; @@ -541,15 +542,15 @@ static PyObject *Values_dispatch(Values *self, PyObject *args, PyObject *kwds) { PyErr_Format(PyExc_TypeError, "meta must be a dict"); return NULL; } - size = (int) PySequence_Length(values); + size = (size_t) PySequence_Length(values); if (size != ds->ds_num) { - PyErr_Format(PyExc_RuntimeError, "type %s needs %d values, got %i", value_list.type, ds->ds_num, size); + PyErr_Format(PyExc_RuntimeError, "type %s needs %zu values, got %zu", value_list.type, ds->ds_num, size); return NULL; } - value = malloc(size * sizeof(*value)); + value = calloc(size, sizeof(*value)); for (i = 0; i < size; ++i) { PyObject *item, *num; - item = PySequence_Fast_GET_ITEM(values, i); /* Borrowed reference. */ + item = PySequence_Fast_GET_ITEM(values, (int) i); /* Borrowed reference. */ if (ds->ds->type == DS_TYPE_COUNTER) { num = PyNumber_Long(item); /* New reference. */ if (num != NULL) { @@ -610,9 +611,9 @@ static PyObject *Values_dispatch(Values *self, PyObject *args, PyObject *kwds) { } static PyObject *Values_write(Values *self, PyObject *args, PyObject *kwds) { - int i, ret; + int ret; const data_set_t *ds; - int size; + size_t size, i; value_t *value; value_list_t value_list = VALUE_LIST_INIT; PyObject *values = self->values, *meta = self->meta; @@ -645,12 +646,12 @@ static PyObject *Values_write(Values *self, PyObject *args, PyObject *kwds) { PyErr_Format(PyExc_TypeError, "values must be list or tuple"); return NULL; } - size = (int) PySequence_Length(values); + size = (size_t) PySequence_Length(values); if (size != ds->ds_num) { - PyErr_Format(PyExc_RuntimeError, "type %s needs %d values, got %i", value_list.type, ds->ds_num, size); + PyErr_Format(PyExc_RuntimeError, "type %s needs %zu values, got %zu", value_list.type, ds->ds_num, size); return NULL; } - value = malloc(size * sizeof(*value)); + value = calloc(size, sizeof(*value)); for (i = 0; i < size; ++i) { PyObject *item, *num; item = PySequence_Fast_GET_ITEM(values, i); /* Borrowed reference. */