diff --git a/CHANGES b/CHANGES index 58dbde9..6cbb845 100644 --- a/CHANGES +++ b/CHANGES @@ -34,6 +34,7 @@ Modules/ * Fix reference leak in result4 * Fix several compiler warnings * Fix memory leak in whoami +* Fix internal error handling of LDAPControl_to_List() and, thanks to Michael Ströder: * removed unused code schema.c * moved code from version.c to ldapmodule.c diff --git a/Modules/ldapcontrol.c b/Modules/ldapcontrol.c index 7d8fbe3..5cd30f9 100644 --- a/Modules/ldapcontrol.c +++ b/Modules/ldapcontrol.c @@ -172,22 +172,21 @@ LDAPControls_to_List(LDAPControl **ldcs) if (tmp) while (*tmp++) num_ctrls++; - if (!(res = PyList_New(num_ctrls))) - goto endlbl; + if ((res = PyList_New(num_ctrls)) == NULL) { + return NULL; + } for (i = 0; i < num_ctrls; i++) { - if (!(pyctrl = Py_BuildValue("sbO&", ldcs[i]->ldctl_oid, - ldcs[i]->ldctl_iscritical, - LDAPberval_to_object, - &ldcs[i]->ldctl_value))) { - goto endlbl; + pyctrl = Py_BuildValue("sbO&", + ldcs[i]->ldctl_oid, + ldcs[i]->ldctl_iscritical, + LDAPberval_to_object, &ldcs[i]->ldctl_value); + if (pyctrl == NULL) { + Py_DECREF(res); + return NULL; } PyList_SET_ITEM(res, i, pyctrl); } - Py_INCREF(res); - - endlbl: - Py_XDECREF(res); return res; }