BUG/MEDIUM: spoa/python: Fixing PyObject_Call positional arguments
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.
This commit is contained in:
parent
d1c0cf80bc
commit
042f697a0f
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue