From bd3fce4e15cf87f72c6bfdb7cac9a5133d39c4e2 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Mon, 4 Dec 2017 11:07:29 +0100 Subject: [PATCH] Fix error handling of LDAPControl_to_List() 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 --- CHANGES | 1 + Modules/ldapcontrol.c | 21 ++++++++++----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CHANGES b/CHANGES index dfe4e4d6..43978bce 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 7d8fbe38..5cd30f91 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; } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy