Skip to content

Commit

Permalink
Fix error handling of LDAPControl_to_List() (#89)
Browse files Browse the repository at this point in the history
LDAPControls_to_List() may have returned a partly filled list
in case Py_BuildValue() fails.
In case of an error, DECREF the list and return NULL.

https://github.com/python-ldap/python-ldap/pull/89
Closes: https://github.com/python-ldap/python-ldap/issues/22
Signed-off-by: Christian Heimes <cheimes@redhat.com>
  • Loading branch information
Christian Heimes authored and Petr Viktorin committed Dec 4, 2017
1 parent 18f98aa commit c86b8e9
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 11 deletions.
1 change: 1 addition & 0 deletions CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
21 changes: 10 additions & 11 deletions Modules/ldapcontrol.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down

0 comments on commit c86b8e9

Please sign in to comment.