From c8634253582824391743e4a294225c7f53095914 Mon Sep 17 00:00:00 2001
From: Sang Seok Lim <slim@openldap.org>
Date: Mon, 20 Dec 2004 16:53:05 +0000
Subject: [PATCH] fix snacc buffer memory leak

---
 contrib/slapd-modules/comp_match/Makefile |  2 +-
 contrib/slapd-modules/comp_match/init.c   | 18 +++++-------------
 2 files changed, 6 insertions(+), 14 deletions(-)

diff --git a/contrib/slapd-modules/comp_match/Makefile b/contrib/slapd-modules/comp_match/Makefile
index 9327bef54d..1c7730bda4 100644
--- a/contrib/slapd-modules/comp_match/Makefile
+++ b/contrib/slapd-modules/comp_match/Makefile
@@ -17,7 +17,7 @@
 
 topbuilddir = ../../../../build
 topsrcdir = ../../..
-snaccdir = /usr/local/snacc
+snaccdir = /home/slim/snacc
 
 LIBTOOL=$(topbuilddir)/libtool
 OPT=-g -O2 -DLDAP_COMPONENT
diff --git a/contrib/slapd-modules/comp_match/init.c b/contrib/slapd-modules/comp_match/init.c
index d037306bea..577ce4a8de 100644
--- a/contrib/slapd-modules/comp_match/init.c
+++ b/contrib/slapd-modules/comp_match/init.c
@@ -201,8 +201,8 @@ comp_convert_attr_to_comp LDAP_P (( Attribute* a, Syntax *syn, struct berval* bv
         int mode, bytesDecoded, size, rc;
         void* component;
 	char* oid = a->a_desc->ad_type->sat_atype.at_oid ;
-        GenBuf* b;
-        ExpBuf* buf;
+        GenBuf* b = NULL;
+        ExpBuf* buf = NULL;
 	OidDecoderMapping* odm;
 	
 	/* look for the decoder registered for the given attribute */
@@ -233,6 +233,7 @@ comp_convert_attr_to_comp LDAP_P (( Attribute* a, Syntax *syn, struct berval* bv
 	}
 
 	ExpBufFreeBuf( buf );
+	GenBufFreeBuf( b );
 	if ( rc == -1 ) {
 		ShutdownNibbleMemLocal ( a->a_comp_data->cd_mem_op );
 		free ( a->a_comp_data );
@@ -273,6 +274,7 @@ comp_convert_assert_to_comp (
 
 	rc = (*decoder)( mem_op, genBuf, csi, len, mode );
 	ExpBufFreeBuf ( buf );
+	GenBufFreeBuf( genBuf );
 }
 
 int intToAscii( int value, char* buf ) {
@@ -662,20 +664,10 @@ comp_test_components( void* attr_nm, void* assert_nm, ComponentSyntaxInfo* csi_a
 			mode = DEC_ALLOC_MODE_2;
 
 			/* Try to decode with BER/DER decoder */
-#if 0
-			rc =BDecComponentTop( odm->BER_Decode, attr_nm, b, 0,0, &contained_comp,&bytesDecoded, mode );
-#endif
 			rc = odm->BER_Decode ( attr_nm, b, (ComponentSyntaxInfo*)&contained_comp, &bytesDecoded, mode );
 
-#if 0
-			if ( rc != LDAP_SUCCESS ) {
-				/* If fails with BER/DER decoder, try with GSER */
-				bytesDecoded = 0;
-				BufResetInReadMode( b );
-				rc = odm->GSER_decoder( attr_nm, b, contained_comp, &bytesDecoded, mode);
-			}
-#endif
 			ExpBufFreeBuf( buf );
+			GenBufFreeBuf( b );
 
 			if ( rc != LDAP_SUCCESS ) return LDAP_PROTOCOL_ERROR;
 
-- 
GitLab