From: Benjamin Peterson Date: Thu, 7 Jul 2016 06:26:32 +0000 (-0700) Subject: fix refleaks in PyDict_SetItem error cases (closes #27248) X-Git-Tag: v2.7.13rc1~254 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ee69451f344847858919bacf00a087c77f381264;p=thirdparty%2FPython%2Fcpython.git fix refleaks in PyDict_SetItem error cases (closes #27248) --- diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 272a283b3e1a..438c70b45a15 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -3693,8 +3693,10 @@ add_members(PyTypeObject *type, PyMemberDef *memb) descr = PyDescr_NewMember(type, memb); if (descr == NULL) return -1; - if (PyDict_SetItemString(dict, memb->name, descr) < 0) + if (PyDict_SetItemString(dict, memb->name, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } return 0; @@ -3713,8 +3715,10 @@ add_getset(PyTypeObject *type, PyGetSetDef *gsp) if (descr == NULL) return -1; - if (PyDict_SetItemString(dict, gsp->name, descr) < 0) + if (PyDict_SetItemString(dict, gsp->name, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } return 0; @@ -6498,8 +6502,10 @@ add_operators(PyTypeObject *type) descr = PyDescr_NewWrapper(type, p, *ptr); if (descr == NULL) return -1; - if (PyDict_SetItem(dict, p->name_strobj, descr) < 0) + if (PyDict_SetItem(dict, p->name_strobj, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } }