]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: spoa/python: Fixing references to None
authorGilchrist Dadaglo <dadaglo@amazon.com>
Tue, 8 Dec 2020 14:37:14 +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/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.

contrib/spoa_server/ps_python.c

index 20861d6e37832bd4559ccbeff943ef86e5100b93..04b21f1ef8054c99fac5846a4c1908e175949bac 100644 (file)
@@ -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;
 }