OpenLDAP: fix LDAP connection phase memory leak

bug: http://curl.haxx.se/bug/view.cgi?id=3474308
This commit is contained in:
Yang Tse 2012-01-18 16:06:29 +01:00
parent 6ea7acf5a9
commit 2cafb0e97c

View File

@ -6,7 +6,7 @@
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 2010, Howard Chu, <hyc@openldap.org> * Copyright (C) 2010, Howard Chu, <hyc@openldap.org>
* Copyright (C) 2011, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 2011 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -336,7 +336,10 @@ retry:
int proto; int proto;
ldap_get_option(li->ld, LDAP_OPT_PROTOCOL_VERSION, &proto); ldap_get_option(li->ld, LDAP_OPT_PROTOCOL_VERSION, &proto);
if(proto == LDAP_VERSION3) { if(proto == LDAP_VERSION3) {
ldap_memfree(info); if(info) {
ldap_memfree(info);
info = NULL;
}
proto = LDAP_VERSION2; proto = LDAP_VERSION2;
ldap_set_option(li->ld, LDAP_OPT_PROTOCOL_VERSION, &proto); ldap_set_option(li->ld, LDAP_OPT_PROTOCOL_VERSION, &proto);
li->didbind = FALSE; li->didbind = FALSE;
@ -347,8 +350,13 @@ retry:
if(err) { if(err) {
failf(data, "LDAP remote: bind failed %s %s", ldap_err2string(rc), failf(data, "LDAP remote: bind failed %s %s", ldap_err2string(rc),
info ? info : ""); info ? info : "");
if(info)
ldap_memfree(info);
return CURLE_LOGIN_DENIED; return CURLE_LOGIN_DENIED;
} }
if(info)
ldap_memfree(info);
conn->recv[FIRSTSOCKET] = ldap_recv; conn->recv[FIRSTSOCKET] = ldap_recv;
*done = TRUE; *done = TRUE;
return CURLE_OK; return CURLE_OK;