]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: spoa/python: Fixing PyObject_Call positional arguments
authorGilchrist Dadaglo <dadaglo@amazon.com>
Tue, 8 Dec 2020 14:37:13 +0000 (14:37 +0000)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 9 Dec 2020 07:39:31 +0000 (08:39 +0100)
As per https://docs.python.org/3/c-api/object.html#c.PyObject_Call,
positional arguments should be an empty tuple when not used.
Previously the code had a dictionary instead of tuple. This commit is to
fix it and use tuple to avoid unexpected consequences

This patch must be backported as far as 2.0.

contrib/spoa_server/ps_python.c

index f2ddc165fd8ffa035ea9253e2e9bbeb1925f6805..20861d6e37832bd4559ccbeff943ef86e5100b93 100644 (file)
@@ -43,7 +43,7 @@ static PyObject *module_ipaddress;
 static PyObject *ipv4_address;
 static PyObject *ipv6_address;
 static PyObject *spoa_error;
-static PyObject *empty_array;
+static PyObject *empty_tuple;
 static struct worker *worker;
 
 static int ps_python_start_worker(struct worker *w);
@@ -522,8 +522,8 @@ static int ps_python_start_worker(struct worker *w)
                return 0;
        }
 
-       empty_array = PyDict_New();
-       if (empty_array == NULL) {
+       empty_tuple = PyTuple_New(0);
+       if (empty_tuple == NULL) {
                PyErr_Print();
                return 0;
        }
@@ -710,7 +710,7 @@ static int ps_python_exec_message(struct worker *w, void *ref, int nargs, struct
                                PyErr_Print();
                                return 0;
                        }
-                       value = PyObject_Call(func, empty_array, ip_dict);
+                       value = PyObject_Call(func, empty_tuple, ip_dict);
                        Py_DECREF(func);
                        Py_DECREF(ip_dict);
                        break;
@@ -780,7 +780,7 @@ static int ps_python_exec_message(struct worker *w, void *ref, int nargs, struct
                return 0;
        }
 
-       result = PyObject_Call(python_ref, empty_array, fkw);
+       result = PyObject_Call(python_ref, empty_tuple, fkw);
        Py_DECREF(fkw);
        if (result == NULL) {
                PyErr_Print();