From: Gilchrist Dadaglo Date: Tue, 8 Dec 2020 14:37:14 +0000 (+0000) Subject: BUG/MEDIUM: spoa/python: Fixing references to None X-Git-Tag: v2.4-dev3~34 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bdd034947c4a3a6f8c41af9bf6e62b7a74b4ebbc;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: spoa/python: Fixing references to None As per https://docs.python.org/3/c-api/none.html, None has to be treated exactly like other objects for reference counting. So, when we use it, we need to INCREF and when we are done, DECREF This patch must be backported as far as 2.0. --- diff --git a/contrib/spoa_server/ps_python.c b/contrib/spoa_server/ps_python.c index 20861d6e37..04b21f1ef8 100644 --- a/contrib/spoa_server/ps_python.c +++ b/contrib/spoa_server/ps_python.c @@ -634,6 +634,7 @@ static int ps_python_exec_message(struct worker *w, void *ref, int nargs, struct switch (args[i].value.type) { case SPOE_DATA_T_NULL: + Py_INCREF(Py_None); value = Py_None; break; case SPOE_DATA_T_BOOL: @@ -722,6 +723,7 @@ static int ps_python_exec_message(struct worker *w, void *ref, int nargs, struct value = PY_BYTES_FROM_STRING_AND_SIZE(args[i].value.u.buffer.str, args[i].value.u.buffer.len); break; default: + Py_INCREF(Py_None); value = Py_None; break; } @@ -786,9 +788,7 @@ static int ps_python_exec_message(struct worker *w, void *ref, int nargs, struct PyErr_Print(); return 0; } - if (result != Py_None) { - Py_DECREF(result); - } + Py_DECREF(result); return 1; }