+++ /dev/null
-From a45ed2ad6f92730a479522c46febb1b56b442aba Mon Sep 17 00:00:00 2001
-From: Michael Tremer <michael.tremer@ipfire.org>
-Date: Mon, 23 Nov 2015 02:15:33 +0000
-Subject: [PATCH] Fix crash in lastupdate() method
-
-When a RRD database contains floating point values, the
-PyRRD_Int_FromString function returns NULL, which will then be tried
-to be put into a dictionary.
-This operation fails as PyDict_SetItemString does not handle NULL
-and the program crashes with SEGV.
-
-This patch parses the value as a floating point number
-and will add that instead. If the value could not be parsed,
-None will be added instead.
-
-Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
----
- rrdtoolmodule.c | 16 +++++++++++++---
- 1 file changed, 13 insertions(+), 3 deletions(-)
-
-diff --git a/rrdtoolmodule.c b/rrdtoolmodule.c
-index dead4ff..4713850 100644
---- a/rrdtoolmodule.c
-+++ b/rrdtoolmodule.c
-@@ -880,9 +880,19 @@ _rrdtool_lastupdate(PyObject *self, PyObject *args)
- PyDict_SetItemString(ret, "ds", ds_dict);
-
- for (i = 0; i < ds_cnt; i++) {
-- PyDict_SetItemString(ds_dict,
-- ds_names[i],
-- PyRRD_Int_FromString(last_ds[i], NULL, 10));
-+ PyObject* val = Py_None;
-+
-+ double num;
-+ if (sscanf(last_ds[i], "%lf", &num) == 1) {
-+ val = PyFloat_FromDouble(num);
-+ }
-+
-+ if (!val)
-+ return NULL;
-+
-+ PyDict_SetItemString(ds_dict, ds_names[i], val);
-+ Py_DECREF(val);
-+
- free(last_ds[i]);
- free(ds_names[i]);
- }