diff options
author | Andy Grover <andy@groveronline.com> | 2012-03-18 21:49:07 -0700 |
---|---|---|
committer | Lucas De Marchi <lucas.demarchi@intel.com> | 2014-03-25 00:34:14 -0300 |
commit | 705187f17ba8713327b200d8b62f88397e3a0715 (patch) | |
tree | 06ed3bc11171b69311897f21b4e4eaaad459c722 | |
parent | 31aa6834bad02bd911c57c7278aac1fe792f1e51 (diff) | |
download | kmod-705187f17ba8713327b200d8b62f88397e3a0715.tar.gz |
python: add proper error handling to loaded_modules()
We need to check the result of basically all Py* calls and cleanup
properly if they fail.
-rw-r--r-- | libkmod/python/libkmod.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/libkmod/python/libkmod.c b/libkmod/python/libkmod.c index b361335..dd82d9e 100644 --- a/libkmod/python/libkmod.c +++ b/libkmod/python/libkmod.c @@ -97,15 +97,32 @@ kmod_obj_loaded_modules(PyObject *self, PyObject *unused_args) } PyObject *pylist = PyList_New(0); + if (!pylist) { + kmod_module_unref_list(list); + return PyErr_NoMemory(); + } + /* refcountapallooza. */ kmod_list_foreach(itr, list) { struct kmod_module *mod = kmod_module_get_module(itr); const char *name = kmod_module_get_name(mod); long size = kmod_module_get_size(mod); PyObject *entry = Py_BuildValue("(sl)", name, size); - - PyList_Append(pylist, entry); + if (!entry) { + Py_DECREF(pylist); + kmod_module_unref(mod); + kmod_module_unref_list(list); + return NULL; + } + + if (PyList_Append(pylist, entry) == -1) { + Py_DECREF(entry); + Py_DECREF(pylist); + kmod_module_unref(mod); + kmod_module_unref_list(list); + return NULL; + } Py_DECREF(entry); kmod_module_unref(mod); |