diff options
Diffstat (limited to 'src/python/pyhbac.c')
-rw-r--r-- | src/python/pyhbac.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/python/pyhbac.c b/src/python/pyhbac.c index e9dce9b01..dd345a6eb 100644 --- a/src/python/pyhbac.c +++ b/src/python/pyhbac.c @@ -139,14 +139,17 @@ sequence_as_string_list(PyObject *seq, const char *paramname) utf_item = get_utf8_string(item, p); if (utf_item == NULL) { + Py_DECREF(item); return NULL; } ret[i] = py_strdup(PyString_AsString(utf_item)); Py_DECREF(utf_item); if (!ret[i]) { + Py_DECREF(item); return NULL; } + Py_DECREF(item); } ret[i] = NULL; @@ -242,10 +245,7 @@ str_concat_sequence(PyObject *seq, const char *delim) if (item == NULL) goto fail; part = PyString_AsString(item); - if (part == NULL) { - Py_DECREF(item); - goto fail; - } + if (part == NULL) goto fail; if (s) { s = py_strcat_realloc(s, delim); @@ -260,7 +260,9 @@ str_concat_sequence(PyObject *seq, const char *delim) } return s; + fail: + Py_XDECREF(item); PyMem_Free(s); return NULL; } @@ -269,11 +271,13 @@ fail: static void set_hbac_exception(PyObject *exc, struct hbac_info *error) { - PyErr_SetObject(exc, - Py_BuildValue(sss_py_const_p(char, "(i,s)"), - error->code, - error->rule_name ? \ - error->rule_name : "no rule")); + PyObject *obj; + + obj = Py_BuildValue(sss_py_const_p(char, "(i,s)"), error->code, + error->rule_name ? error->rule_name : "no rule"); + + PyErr_SetObject(exc, obj); + Py_XDECREF(obj); } /* ==================== HBAC Rule Element ========================*/ |