From cee9a36eaa6f9d4c857f8b7e0e0fa24bfe91bedb Mon Sep 17 00:00:00 2001
From: Quanah Gibson-Mount <quanah@openldap.org>
Date: Fri, 30 Oct 2009 19:10:18 +0000
Subject: [PATCH] ITS#6326

---
 CHANGES                          | 1 +
 servers/slapd/back-ldap/search.c | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/CHANGES b/CHANGES
index 52de6498f9..061abbe3c1 100644
--- a/CHANGES
+++ b/CHANGES
@@ -3,6 +3,7 @@ OpenLDAP 2.4 Change Log
 OpenLDAP 2.4.20 Engineering
 	Fixed libldap uninitialized return value (ITS#6355)
 	Fixed slapd debug handling of LDAP_DEBUG_ANY (ITS#6324)
+	Fixed slapd-ldap leak (ITS#6326)
 	Documentation
 		ldap_get_dn(3) typos (ITS#5366)
 
diff --git a/servers/slapd/back-ldap/search.c b/servers/slapd/back-ldap/search.c
index c745828501..c8ccbed0ec 100644
--- a/servers/slapd/back-ldap/search.c
+++ b/servers/slapd/back-ldap/search.c
@@ -759,6 +759,7 @@ ldap_build_entry(
 						( oc = oc_bvfind_undef( &attr->a_vals[i] ) ) != NULL )
 				{
 					ber_dupbv( &pval, &oc->soc_cname );
+					rc = LDAP_SUCCESS;
 
 				} else {
 					LBER_FREE( attr->a_vals[i].bv_val );
@@ -770,8 +771,9 @@ ldap_build_entry(
 					BER_BVZERO( &attr->a_vals[last] );
 					i--;
 				}
+			}
 
-			} else if ( pretty ) {
+			if ( rc == LDAP_SUCCESS && pretty ) {
 				LBER_FREE( attr->a_vals[i].bv_val );
 				attr->a_vals[i] = pval;
 			}
-- 
GitLab