]> git.ipfire.org Git - people/amarx/ipfire-3.x.git/blobdiff - python-rrdtool/patches/python-rrdtool-fix-SEGV.patch
Merge branch 'master' of ssh://git.ipfire.org/pub/git/ipfire-3.x into samba4
[people/amarx/ipfire-3.x.git] / python-rrdtool / patches / python-rrdtool-fix-SEGV.patch
diff --git a/python-rrdtool/patches/python-rrdtool-fix-SEGV.patch b/python-rrdtool/patches/python-rrdtool-fix-SEGV.patch
deleted file mode 100644 (file)
index c45316d..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-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]);
-         }