]> git.ipfire.org Git - people/stevee/ipfire-3.x.git/commitdiff
python-rrdtool: Update to version 0.1.2
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 15 Dec 2015 14:45:58 +0000 (14:45 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 15 Dec 2015 14:45:58 +0000 (14:45 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
python-rrdtool/patches/python-rrdtool-fix-SEGV.patch [new file with mode: 0644]
python-rrdtool/python-rrdtool.nm

diff --git a/python-rrdtool/patches/python-rrdtool-fix-SEGV.patch b/python-rrdtool/patches/python-rrdtool-fix-SEGV.patch
new file mode 100644 (file)
index 0000000..c45316d
--- /dev/null
@@ -0,0 +1,47 @@
+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]);
+         }
index 6d3d49a7f100d9d51aa215c48264e49516dd81a1..7fa8b8b7ae8610baedb9c3cb8796911884c53a15 100644 (file)
@@ -4,9 +4,8 @@
 ###############################################################################
 
 name       = python-rrdtool
-version    = 0.1.1
-release    = 2
-thisapp    = rrdtool-%{version}
+version    = 0.1.2
+release    = 1
 
 groups     = System/Libraries
 url        = https://github.com/commx/python-rrdtool