From: Ondřej Kuzník Date: Fri, 13 Jun 2025 07:06:15 +0000 (+0100) Subject: ITS#10347 Be explicit about managing attr_bv storage X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=9496132d281aac87d39a862fb9db5b588cd47845;p=thirdparty%2Fopenldap.git ITS#10347 Be explicit about managing attr_bv storage --- diff --git a/contrib/slapd-modules/comp_match/init.c b/contrib/slapd-modules/comp_match/init.c index c3ab83c9b4..c9286f2dfe 100644 --- a/contrib/slapd-modules/comp_match/init.c +++ b/contrib/slapd-modules/comp_match/init.c @@ -322,6 +322,7 @@ comp_convert_asn_to_ldap ( MatchingRule* mr, ComponentSyntaxInfo* csi, struct be else csi->csi_syntax = NULL; + BER_BVZERO( bv ); switch ( csi->csi_comp_desc->cd_type_id ) { case BASICTYPE_BOOLEAN : @@ -428,9 +429,9 @@ comp_convert_asn_to_ldap ( MatchingRule* mr, ComponentSyntaxInfo* csi, struct be rc = csi->csi_syntax->ssyn_pretty(csi->csi_syntax, bv, &prettied , NULL ); if ( rc != LDAP_SUCCESS ) return LDAP_INVALID_SYNTAX; -#if 0 - free ( bv->bv_val );/*potential memory leak?*/ -#endif + if ( bv->bv_val ) + free( bv->bv_val ); + *allocated = 1; bv->bv_val = prettied.bv_val; bv->bv_len = prettied.bv_len; } @@ -555,8 +556,12 @@ comp_test_one_component ( struct berval* assert_bv = &ca->ca_ma_value; int allocated = 0; /*Attribute is converted to compatible LDAP encodings*/ - if ( comp_convert_asn_to_ldap( mr, csi_attr, &attr_bv, &allocated ) != LDAP_SUCCESS ) + if ( comp_convert_asn_to_ldap( mr, csi_attr, &attr_bv, + &allocated ) != LDAP_SUCCESS ) { + if ( allocated ) + free( attr_bv.bv_val ); return LDAP_INAPPROPRIATE_MATCHING; + } /* extracted component value is not normalized */ if ( ca->ca_ma_rule->smr_normalize ) { rc = ca->ca_ma_rule->smr_normalize (