diff options
author | Benjamin Peterson <benjamin@python.org> | 2016-07-07 06:26:32 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2016-07-07 06:26:32 (GMT) |
commit | 27007dccec8ce20ee95e45492643bc1407326abc (patch) | |
tree | bd2ceaadee06abb456997da42416a6e455f0ffdf | |
parent | a1fc45ae73f6c230ffb936db549ec225e19656af (diff) | |
download | cpython-27007dccec8ce20ee95e45492643bc1407326abc.zip cpython-27007dccec8ce20ee95e45492643bc1407326abc.tar.gz cpython-27007dccec8ce20ee95e45492643bc1407326abc.tar.bz2 |
fix refleaks in PyDict_SetItem error cases (closes #27248)
-rw-r--r-- | Objects/typeobject.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 317334f..8c5c77e 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -4509,8 +4509,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; @@ -4529,8 +4531,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; @@ -7010,8 +7014,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); } } |