summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: e3571ad)
raw | patch | inline | side by side (parent: e3571ad)
author | Florian Forster <octo@collectd.org> | |
Tue, 8 Dec 2015 12:41:35 +0000 (13:41 +0100) | ||
committer | Florian Forster <octo@collectd.org> | |
Tue, 8 Dec 2015 12:41:35 +0000 (13:41 +0100) |
The regiser_read / register_write functions assume a user_data_t*
pointing to static memory and will not store / free the pointer.
CID: 38002
pointing to static memory and will not store / free the pointer.
CID: 38002
src/python.c | patch | blob | history |
diff --git a/src/python.c b/src/python.c
index 95240afb6a951d3994e97e4009e8724efc5aa801..6a65ff25c5de4dff9d17de281c3abbd269f33981 100644 (file)
--- a/src/python.c
+++ b/src/python.c
@@ -573,7 +573,7 @@ static PyObject *cpy_register_generic_userdata(void *reg, void *handler, PyObjec
char buf[512];
reg_function_t *register_function = (reg_function_t *) reg;
cpy_callback_t *c = NULL;
- user_data_t *user_data = NULL;
+ user_data_t user_data;
char *name = NULL;
PyObject *callback = NULL, *data = NULL;
static char *kwlist[] = {"callback", "data", "name", NULL};
@@ -594,17 +594,19 @@ static PyObject *cpy_register_generic_userdata(void *reg, void *handler, PyObjec
c->callback = callback;
c->data = data;
c->next = NULL;
- user_data = malloc(sizeof(*user_data));
- user_data->free_func = cpy_destroy_user_data;
- user_data->data = c;
- register_function(buf, handler, user_data);
+
+ memset (&user_data, 0, sizeof (user_data));
+ user_data.free_func = cpy_destroy_user_data;
+ user_data.data = c;
+
+ register_function(buf, handler, &user_data);
return cpy_string_to_unicode_or_bytes(buf);
}
static PyObject *cpy_register_read(PyObject *self, PyObject *args, PyObject *kwds) {
char buf[512];
cpy_callback_t *c = NULL;
- user_data_t *user_data = NULL;
+ user_data_t user_data;
double interval = 0;
char *name = NULL;
PyObject *callback = NULL, *data = NULL;
@@ -627,13 +629,16 @@ static PyObject *cpy_register_read(PyObject *self, PyObject *args, PyObject *kwd
c->callback = callback;
c->data = data;
c->next = NULL;
- user_data = malloc(sizeof(*user_data));
- user_data->free_func = cpy_destroy_user_data;
- user_data->data = c;
+
+ memset (&user_data, 0, sizeof (user_data));
+ user_data.free_func = cpy_destroy_user_data;
+ user_data.data = c;
+
ts.tv_sec = interval;
ts.tv_nsec = (interval - ts.tv_sec) * 1000000000;
- plugin_register_complex_read(/* group = */ NULL, buf,
- cpy_read_callback, &ts, user_data);
+ plugin_register_complex_read(/* group = */ "python", buf,
+ cpy_read_callback, &ts, &user_data);
+
return cpy_string_to_unicode_or_bytes(buf);
}