aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Grover <andy@groveronline.com>2012-03-18 21:49:07 -0700
committerLucas De Marchi <lucas.demarchi@intel.com>2014-03-25 00:34:14 -0300
commit705187f17ba8713327b200d8b62f88397e3a0715 (patch)
tree06ed3bc11171b69311897f21b4e4eaaad459c722
parent31aa6834bad02bd911c57c7278aac1fe792f1e51 (diff)
downloadkmod-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.c21
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);