From: Howard Chu Date: Mon, 13 Nov 2006 02:57:20 +0000 (+0000) Subject: ITS#4746 additional leaks X-Git-Tag: OPENLDAP_REL_ENG_2_3_30~1 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=45481f72f1f0fc6d780a8340f9eb68127f8f0c6a;p=openldap ITS#4746 additional leaks --- diff --git a/servers/slapd/syncrepl.c b/servers/slapd/syncrepl.c index 91acfc19d1..7ff479ae18 100644 --- a/servers/slapd/syncrepl.c +++ b/servers/slapd/syncrepl.c @@ -1265,7 +1265,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, @@ -1300,6 +1300,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 ) { @@ -1358,6 +1359,7 @@ syncrepl_message_to_op( op->ora_e = ( Entry * ) ch_calloc( 1, sizeof( Entry ) ); 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", @@ -1424,6 +1426,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; }