From 2cafb0e97c288d2e942a50e964e1604c692871db Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Wed, 18 Jan 2012 16:06:29 +0100 Subject: [PATCH] OpenLDAP: fix LDAP connection phase memory leak bug: http://curl.haxx.se/bug/view.cgi?id=3474308 --- lib/openldap.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/openldap.c b/lib/openldap.c index e5a3369a1..a26ff2e15 100644 --- a/lib/openldap.c +++ b/lib/openldap.c @@ -6,7 +6,7 @@ * \___|\___/|_| \_\_____| * * Copyright (C) 2010, Howard Chu, - * Copyright (C) 2011, Daniel Stenberg, , et al. + * Copyright (C) 2011 - 2012, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -336,7 +336,10 @@ retry: int proto; ldap_get_option(li->ld, LDAP_OPT_PROTOCOL_VERSION, &proto); if(proto == LDAP_VERSION3) { - ldap_memfree(info); + if(info) { + ldap_memfree(info); + info = NULL; + } proto = LDAP_VERSION2; ldap_set_option(li->ld, LDAP_OPT_PROTOCOL_VERSION, &proto); li->didbind = FALSE; @@ -347,8 +350,13 @@ retry: if(err) { failf(data, "LDAP remote: bind failed %s %s", ldap_err2string(rc), info ? info : ""); + if(info) + ldap_memfree(info); return CURLE_LOGIN_DENIED; } + + if(info) + ldap_memfree(info); conn->recv[FIRSTSOCKET] = ldap_recv; *done = TRUE; return CURLE_OK;