diff options
| author | Meador Inge <meadori@gmail.com> | 2012-07-19 13:45:43 -0500 |
|---|---|---|
| committer | Meador Inge <meadori@gmail.com> | 2012-07-19 13:45:43 -0500 |
| commit | ab59634ba7581cacce755999f8a9d9bc7e4a7c8c (patch) | |
| tree | 5099dd667c25999449a1a389d03d235fc41a3c16 /Objects/moduleobject.c | |
| parent | 4b6cecada2b7f6d17d386794c77f707c7dd17a71 (diff) | |
| download | cpython-ab59634ba7581cacce755999f8a9d9bc7e4a7c8c.tar.gz | |
Issue #15394: Fix ref leaks in PyModule_Create.
Patch by Julia Lawall.
Diffstat (limited to 'Objects/moduleobject.c')
| -rw-r--r-- | Objects/moduleobject.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index f31b5da26d..533db46efa 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); |
