From 510c2b881e69d19d2b637d912d57bd324d655a38 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Mon, 13 Nov 2006 02:57:05 +0000 Subject: [PATCH] ITS#4746 additional leaks --- servers/slapd/syncrepl.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/servers/slapd/syncrepl.c b/servers/slapd/syncrepl.c index 53ce404729..51b84f7ab0 100644 --- a/servers/slapd/syncrepl.c +++ b/servers/slapd/syncrepl.c @@ -1177,7 +1177,7 @@ syncrepl_message_to_op( struct berval rdn = BER_BVNULL, sup = BER_BVNULL, prdn = BER_BVNULL, nrdn = BER_BVNULL, psup = BER_BVNULL, nsup = BER_BVNULL; - int rc, deleteOldRdn = 0; + int rc, deleteOldRdn = 0, freeReqDn = 0; if ( ldap_msgtype( msg ) != LDAP_RES_SEARCH_ENTRY ) { Debug( LDAP_DEBUG_ANY, @@ -1212,6 +1212,7 @@ syncrepl_message_to_op( ber_dupbv( &op->o_req_ndn, &ndn ); slap_sl_free( ndn.bv_val, op->o_tmpmemctx ); slap_sl_free( dn.bv_val, op->o_tmpmemctx ); + freeReqDn = 1; } else if ( !ber_bvstrcasecmp( &bv, &ls->ls_req )) { int i = verb_to_mask( bvals[0].bv_val, modops ); if ( i < 0 ) { @@ -1270,6 +1271,7 @@ syncrepl_message_to_op( op->ora_e = entry_alloc(); op->ora_e->e_name = op->o_req_dn; op->ora_e->e_nname = op->o_req_ndn; + freeReqDn = 0; rc = slap_mods2entry( modlist, &op->ora_e, 1, 0, &text, txtbuf, textlen); if( rc != LDAP_SUCCESS ) { Debug( LDAP_DEBUG_ANY, "syncrepl_message_to_op: mods2entry (%s)\n", @@ -1340,6 +1342,10 @@ done: if ( !BER_BVISNULL( &prdn )) ch_free( prdn.bv_val ); } + if ( freeReqDn ) { + ch_free( op->o_req_ndn.bv_val ); + ch_free( op->o_req_dn.bv_val ); + } ber_free ( ber, 0 ); return rc; } -- 2.39.5