]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/attr.c
Fix ITS#3424
[openldap] / servers / slapd / attr.c
index 70600c4eb942fd4a362c160728fba4948ed5578c..07c3e4df312d6c773e30610818b22dc905179f33 100644 (file)
 
 #include "slap.h"
 
+#ifdef LDAP_COMP_MATCH
+extern free_component_func* component_destructor;
+#endif
 void
 attr_free( Attribute *a )
 {
        if ( a->a_nvals && a->a_nvals != a->a_vals )
                ber_bvarray_free( a->a_nvals );
        ber_bvarray_free( a->a_vals );
+#ifdef LDAP_COMP_MATCH
+       if ( component_destructor && a->a_comp_data &&  a->a_comp_data->cd_mem_op ) {
+               component_destructor( a->a_comp_data->cd_mem_op );
+               free ( a->a_comp_data );
+       }
+#endif
        free( a );
 }
 
@@ -108,6 +117,9 @@ attr_dup( Attribute *a )
        tmp->a_desc = a->a_desc;
        tmp->a_next = NULL;
        tmp->a_flags = 0;
+#ifdef LDAP_COMP_MATCH
+       tmp->a_comp_data = NULL;
+#endif
 
        return tmp;
 }
@@ -168,6 +180,9 @@ attr_merge(
                (*a)->a_nvals = NULL;
                (*a)->a_next = NULL;
                (*a)->a_flags = 0;
+#ifdef LDAP_COMP_MATCH
+               (*a)->a_comp_data = NULL;
+#endif
        }
 
        rc = value_add( &(*a)->a_vals, vals );
@@ -249,6 +264,9 @@ attr_merge_one(
                (*a)->a_nvals = NULL;
                (*a)->a_next = NULL;
                (*a)->a_flags = 0;
+#ifdef LDAP_COMP_MATCH
+               (*a)->a_comp_data = NULL;
+#endif
        }
 
        rc = value_add_one( &(*a)->a_vals, val );