diff -r 166784c40be8 Objects/typeobject.c --- a/Objects/typeobject.c Sun Jun 05 21:32:45 2016 -0400 +++ b/Objects/typeobject.c Tue Jun 07 17:16:07 2016 +0800 @@ -4522,8 +4522,10 @@ 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; @@ -4542,8 +4544,10 @@ 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; @@ -7023,8 +7027,10 @@ 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); } }