From 2816cb80b42fda9bda6c5e909c42bc06ad1cece9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Mon, 19 Jun 2023 15:41:09 +0100 Subject: [PATCH] ITS#10067 Account for mods being optional --- servers/slapd/back-asyncmeta/modify.c | 14 +++++--------- servers/slapd/back-meta/modify.c | 19 ++++--------------- 2 files changed, 9 insertions(+), 24 deletions(-) diff --git a/servers/slapd/back-asyncmeta/modify.c b/servers/slapd/back-asyncmeta/modify.c index a70bae82e3..c28bdc48e5 100644 --- a/servers/slapd/back-asyncmeta/modify.c +++ b/servers/slapd/back-asyncmeta/modify.c @@ -67,21 +67,15 @@ asyncmeta_back_modify_start(Operation *op, for ( i = 0, ml = op->orm_modlist; ml; i++ ,ml = ml->sml_next ) ; - if (i > 0) { - mods = op->o_tmpalloc( sizeof( LDAPMod )*i, op->o_tmpmemctx ); - } - if ( mods == NULL ) { - rs->sr_err = LDAP_OTHER; - retcode = META_SEARCH_ERR; - goto doreturn; - } - modv = ( LDAPMod ** )op->o_tmpalloc( ( i + 1 )*sizeof( LDAPMod * ), op->o_tmpmemctx ); + modv = op->o_tmpalloc( ( i + 1 )*sizeof( LDAPMod * ) + i*sizeof( LDAPMod ), + op->o_tmpmemctx ); if ( modv == NULL ) { rs->sr_err = LDAP_OTHER; retcode = META_SEARCH_ERR; goto doreturn; } + mods = (LDAPMod *)&modv[ i + 1 ]; isupdate = be_shadow_update( op ); for ( i = 0, ml = op->orm_modlist; ml; ml = ml->sml_next ) { @@ -224,6 +218,8 @@ done: op->o_tmpfree( mdn.bv_val, op->o_tmpmemctx ); } + op->o_tmpfree( modv, op->o_tmpmemctx ); + doreturn:; Debug( LDAP_DEBUG_TRACE, "%s <<< asyncmeta_back_modify_start[%p]=%d\n", op->o_log_prefix, msc, candidates[candidate].sr_msgid ); return retcode; diff --git a/servers/slapd/back-meta/modify.c b/servers/slapd/back-meta/modify.c index 0a78e765a7..459e835a58 100644 --- a/servers/slapd/back-meta/modify.c +++ b/servers/slapd/back-meta/modify.c @@ -74,18 +74,8 @@ meta_back_modify( Operation *op, SlapReply *rs ) for ( i = 0, ml = op->orm_modlist; ml; i++ ,ml = ml->sml_next ) ; - mods = ch_malloc( sizeof( LDAPMod )*i ); - if ( mods == NULL ) { - rs->sr_err = LDAP_OTHER; - send_ldap_result( op, rs ); - goto cleanup; - } - modv = ( LDAPMod ** )ch_malloc( ( i + 1 )*sizeof( LDAPMod * ) ); - if ( modv == NULL ) { - rs->sr_err = LDAP_OTHER; - send_ldap_result( op, rs ); - goto cleanup; - } + modv = ch_malloc( ( i + 1 )*sizeof( LDAPMod * ) + i*sizeof( LDAPMod ) ); + mods = (LDAPMod *)&modv[ i + 1 ]; dc.ctx = "modifyAttrDN"; isupdate = be_shadow_update( op ); @@ -206,11 +196,10 @@ cleanup:; } if ( modv != NULL ) { for ( i = 0; modv[ i ]; i++ ) { - free( modv[ i ]->mod_bvalues ); + ch_free( modv[ i ]->mod_bvalues ); } } - free( mods ); - free( modv ); + ch_free( modv ); if ( mc ) { meta_back_release_conn( mi, mc ); -- 2.47.2