summaryrefslogtreecommitdiffstats
path: root/Objects/moduleobject.c
diff options
context:
space:
mode:
authorMeador Inge <meadori@gmail.com>2012-07-19 18:45:43 (GMT)
committerMeador Inge <meadori@gmail.com>2012-07-19 18:45:43 (GMT)
commit29e49d63942cc75ead85a4cb77dea34285be9fcc (patch)
tree11f26c0761d11c386ee7471aad31693542f2535f /Objects/moduleobject.c
parent60c2266afe82daab47779deed6f701902943d20e (diff)
downloadcpython-29e49d63942cc75ead85a4cb77dea34285be9fcc.zip
cpython-29e49d63942cc75ead85a4cb77dea34285be9fcc.tar.gz
cpython-29e49d63942cc75ead85a4cb77dea34285be9fcc.tar.bz2
Issue #15394: Fix ref leaks in PyModule_Create.
Patch by Julia Lawall.
Diffstat (limited to 'Objects/moduleobject.c')
-rw-r--r--Objects/moduleobject.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c
index f31b5da..533db46 100644
--- a/Objects/moduleobject.c
+++ b/Objects/moduleobject.c
@@ -117,8 +117,10 @@ PyModule_Create2(struct PyModuleDef* module, int module_api_version)
d = PyModule_GetDict((PyObject*)m);
if (module->m_methods != NULL) {
n = PyUnicode_FromString(name);
- if (n == NULL)
+ if (n == NULL) {
+ Py_DECREF(m);
return NULL;
+ }
for (ml = module->m_methods; ml->ml_name != NULL; ml++) {
if ((ml->ml_flags & METH_CLASS) ||
(ml->ml_flags & METH_STATIC)) {
@@ -126,16 +128,19 @@ PyModule_Create2(struct PyModuleDef* module, int module_api_version)
"module functions cannot set"
" METH_CLASS or METH_STATIC");
Py_DECREF(n);
+ Py_DECREF(m);
return NULL;
}
v = PyCFunction_NewEx(ml, (PyObject*)m, n);
if (v == NULL) {
Py_DECREF(n);
+ Py_DECREF(m);
return NULL;
}
if (PyDict_SetItemString(d, ml->ml_name, v) != 0) {
Py_DECREF(v);
Py_DECREF(n);
+ Py_DECREF(m);
return NULL;
}
Py_DECREF(v);
@@ -146,6 +151,7 @@ PyModule_Create2(struct PyModuleDef* module, int module_api_version)
v = PyUnicode_FromString(module->m_doc);
if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) {
Py_XDECREF(v);
+ Py_DECREF(m);
return NULL;
}
Py_DECREF(v);