]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#10347 Be explicit about managing attr_bv storage
authorOndřej Kuzník <ondra@mistotebe.net>
Fri, 13 Jun 2025 07:06:15 +0000 (08:06 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Fri, 20 Jun 2025 14:52:19 +0000 (14:52 +0000)
contrib/slapd-modules/comp_match/init.c

index c3ab83c9b4c876ad6915c345e56b4ae55ef74e70..c9286f2dfe42db1c1daa4f26c5b0c6da6fff59a3 100644 (file)
@@ -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 (