From 7dde8ae61ee58ef8457f9c9ab6d908fa8c01ea2b Mon Sep 17 00:00:00 2001 From: Gilchrist Dadaglo Date: Tue, 8 Dec 2020 14:37:12 +0000 Subject: [PATCH] BUG/MINOR: spoa/python: Cleanup ipaddress objects if initialization fails This change is to ensure objects from the ipaddress module are cleaned up when spoa module initialization fails. In general the interpreter would just crash, but in a code where import is conditional (try/except), then we would keep those objects around This patch must be backported as far as 2.0. (cherry picked from commit d1c0cf80bceb352b6bf33064b352f6dbe2b0b39c) Signed-off-by: Christopher Faulet --- contrib/spoa_server/ps_python.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/contrib/spoa_server/ps_python.c b/contrib/spoa_server/ps_python.c index 12953f3..f2ddc16 100644 --- a/contrib/spoa_server/ps_python.c +++ b/contrib/spoa_server/ps_python.c @@ -410,18 +410,24 @@ static int ps_python_start_worker(struct worker *w) ipv4_address = PyObject_GetAttrString(module_ipaddress, "IPv4Address"); if (ipv4_address == NULL) { + Py_DECREF(module_ipaddress); PyErr_Print(); return 0; } ipv6_address = PyObject_GetAttrString(module_ipaddress, "IPv6Address"); if (ipv6_address == NULL) { + Py_DECREF(ipv4_address); + Py_DECREF(module_ipaddress); PyErr_Print(); return 0; } PY_INIT_MODULE(m, "spoa", spoa_methods, &spoa_module_definition); if (m == NULL) { + Py_DECREF(ipv4_address); + Py_DECREF(ipv6_address); + Py_DECREF(module_ipaddress); PyErr_Print(); return 0; } -- 1.7.10.4