From 90d2b4e2f04176b4cc79183034f59953aea9711d Mon Sep 17 00:00:00 2001
From: Quanah Gibson-Mount <quanah@openldap.org>
Date: Mon, 3 Jan 2011 19:58:02 +0000
Subject: [PATCH] ITS#6629

---
 CHANGES                |  1 +
 servers/slapd/result.c | 16 ++++++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/CHANGES b/CHANGES
index bc4e33f08e..681b71e649 100644
--- a/CHANGES
+++ b/CHANGES
@@ -15,6 +15,7 @@ OpenLDAP 2.4.24 Engineering
 	Fixed ldapsearch segfault with deref (ITS#6638)
 	Fixed slapd acl parsing overflow (ITS#6611)
 	Fixed slapd config leak with olcDbDirectory (ITS#6634)
+	Fixed slapd to free controls if needed (ITS#6629)
 	Fixed slapd filter leak (ITS#6635)
 	Fixed slapd when first acl is value dependent (ITS#6693)
 	Fixed slapd modify to return actual error (ITS#6581)
diff --git a/servers/slapd/result.c b/servers/slapd/result.c
index 38152e0194..c984863bc4 100644
--- a/servers/slapd/result.c
+++ b/servers/slapd/result.c
@@ -1356,6 +1356,14 @@ error_return:;
 		rs->sr_flags &= ~REP_ENTRY_MUSTBEFREED;
 	}
 
+	if ( rs->sr_flags & REP_CTRLS_MUSTBEFREED ) {
+		rs->sr_flags ^= REP_CTRLS_MUSTBEFREED; /* paranoia */
+		if ( rs->sr_ctrls ) {
+			slap_free_ctrls( op, rs->sr_ctrls );
+			rs->sr_ctrls = NULL;
+		}
+	}
+
 	return( rc );
 }
 
@@ -1510,6 +1518,14 @@ rel:
 		(void)slap_cleanup_play( op, rs );
 	}
 
+	if ( rs->sr_flags & REP_CTRLS_MUSTBEFREED ) {
+		rs->sr_flags ^= REP_CTRLS_MUSTBEFREED; /* paranoia */
+		if ( rs->sr_ctrls ) {
+			slap_free_ctrls( op, rs->sr_ctrls );
+			rs->sr_ctrls = NULL;
+		}
+	}
+
 	return rc;
 }
 
-- 
GitLab