From d1c0cf80bceb352b6bf33064b352f6dbe2b0b39c 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. --- 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 12953f380..f2ddc165f 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; }