fix various memory leaks and handling issues

This commit is contained in:
Pierangelo Masarati 2005-12-06 22:06:29 +00:00
parent 2ea72234aa
commit c226563da4
4 changed files with 33 additions and 7 deletions

View File

@ -480,6 +480,11 @@ done:;
backsql_entry_clean( op, &p );
}
if ( rs->sr_ref ) {
ber_bvarray_free( rs->sr_ref );
rs->sr_ref = NULL;
}
return rs->sr_err;
}

View File

@ -204,6 +204,11 @@ done:;
op->o_tmpfree( bsi.bsi_attrs, op->o_tmpmemctx );
}
if ( rs->sr_ref ) {
ber_bvarray_free( rs->sr_ref );
rs->sr_ref = NULL;
}
Debug( LDAP_DEBUG_TRACE, "<==backsql_modify()\n", 0, 0, 0 );
return rs->sr_err;

View File

@ -558,8 +558,15 @@ done:;
Modifications *tmp;
for (; mod; mod=tmp ) {
tmp = mod->sml_next;
/* slap_modrdn2mods does things one way,
* slap_mods_opattrs does it differently
*/
if ( mod->sml_op != SLAP_MOD_SOFTADD &&
mod->sml_op != LDAP_MOD_DELETE ) break;
if ( mod->sml_nvalues ) free( mod->sml_nvalues[0].bv_val );
free( mod );
}
slap_mods_free( mod, 1 );
}
if ( !BER_BVISNULL( &e_id.eid_ndn ) ) {
@ -582,6 +589,11 @@ done:;
backsql_entry_clean( op, &n );
}
if ( rs->sr_ref ) {
ber_bvarray_free( rs->sr_ref );
rs->sr_ref = NULL;
}
Debug( LDAP_DEBUG_TRACE, "<==backsql_modrdn()\n", 0, 0, 0 );
return rs->sr_err;

View File

@ -1517,16 +1517,16 @@ backsql_srch_query( backsql_srch_info *bsi, struct berval *query )
BER_BVZERO( query );
}
free( bsi->bsi_sel.bb_val.bv_val );
bsi->bsi_op->o_tmpfree( bsi->bsi_sel.bb_val.bv_val, bsi->bsi_op->o_tmpmemctx );
BER_BVZERO( &bsi->bsi_sel.bb_val );
bsi->bsi_sel.bb_len = 0;
free( bsi->bsi_from.bb_val.bv_val );
bsi->bsi_op->o_tmpfree( bsi->bsi_from.bb_val.bv_val, bsi->bsi_op->o_tmpmemctx );
BER_BVZERO( &bsi->bsi_from.bb_val );
bsi->bsi_from.bb_len = 0;
free( bsi->bsi_join_where.bb_val.bv_val );
bsi->bsi_op->o_tmpfree( bsi->bsi_join_where.bb_val.bv_val, bsi->bsi_op->o_tmpmemctx );
BER_BVZERO( &bsi->bsi_join_where.bb_val );
bsi->bsi_join_where.bb_len = 0;
free( bsi->bsi_flt_where.bb_val.bv_val );
bsi->bsi_op->o_tmpfree( bsi->bsi_flt_where.bb_val.bv_val, bsi->bsi_op->o_tmpmemctx );
BER_BVZERO( &bsi->bsi_flt_where.bb_val );
bsi->bsi_flt_where.bb_len = 0;
@ -1620,7 +1620,7 @@ backsql_oc_get_candidates( void *v_oc, void *v_bsi )
query.bv_val, 0, 0 );
rc = backsql_Prepare( bsi->bsi_dbh, &sth, query.bv_val, 0 );
free( query.bv_val );
bsi->bsi_op->o_tmpfree( query.bv_val, bsi->bsi_op->o_tmpmemctx );
BER_BVZERO( &query );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE, "backsql_oc_get_candidates(): "
@ -1991,6 +1991,10 @@ backsql_search( Operation *op, SlapReply *rs )
rs->sr_ref = NULL;
}
if ( !BER_BVISNULL( &base_entry.e_nname ) ) {
entry_clean( &base_entry );
}
goto done;
}
#ifdef SLAP_ACL_HONOR_DISCLOSE