
python-checkins at python
Jul 19, 2012, 11:52 AM
Post #1 of 1
(32 views)
Permalink
|
|
cpython (merge 3.2 -> default): Issue #15394: Fix ref leaks in PyModule Create.
|
|
http://hg.python.org/cpython/rev/571777bf5527 changeset: 78179:571777bf5527 parent: 78177:9e94eb39aaad parent: 78178:7140d97d36fd user: Meador Inge <meadori [at] gmail> date: Thu Jul 19 13:51:59 2012 -0500 summary: Issue #15394: Fix ref leaks in PyModule_Create. Patch by Julia Lawall. files: Misc/ACKS | 1 + Misc/NEWS | 3 +++ Objects/moduleobject.c | 8 +++++++- 3 files changed, 11 insertions(+), 1 deletions(-) diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -601,6 +601,7 @@ Piers Lauder Ben Laurie Simon Law +Julia Lawall Chris Lawrence Brian Leair Mathieu Leduc-Hamel diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ Core and Builtins ----------------- +- Issue #15394: An issue in PyModule_Create that caused references to + be leaked on some error paths has been fixed. Patch by Julia Lawall. + - Issue #15368: An issue that caused bytecode generation to be non-deterministic has been fixed. diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -126,8 +126,10 @@ 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)) { @@ -135,16 +137,19 @@ "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); @@ -155,6 +160,7 @@ 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); -- Repository URL: http://hg.python.org/cpython
|