]> git.sur5r.net Git - openldap/commitdiff
Fix memory leak of Mod.sml_type
authorHoward Chu <hyc@openldap.org>
Wed, 2 Jan 2002 12:34:35 +0000 (12:34 +0000)
committerHoward Chu <hyc@openldap.org>
Wed, 2 Jan 2002 12:34:35 +0000 (12:34 +0000)
servers/slapd/add.c
servers/slapd/modify.c
servers/slapd/mods.c

index c02e33b6e86b62c497318ac426e50fa48e09f8a6..047a61cbf7ab3c8b70ce0904fb612743941a1bad 100644 (file)
@@ -143,15 +143,12 @@ do_add( Connection *conn, Operation *op )
                        free( tmp.sml_type.bv_val );
                        goto done;
                }
-               mod  = (Modifications *) ch_malloc( sizeof(Modifications)
-                       + tmp.sml_type.bv_len + 1);
+               mod  = (Modifications *) ch_malloc( sizeof(Modifications) );
                
                mod->sml_op = LDAP_MOD_ADD;
                mod->sml_next = NULL;
                mod->sml_desc = NULL;
-               mod->sml_type.bv_val = (char *)(mod+1);
-               strcpy(mod->sml_type.bv_val, tmp.sml_type.bv_val);
-               mod->sml_type.bv_len = tmp.sml_type.bv_len;
+               mod->sml_type = tmp.sml_type;
                mod->sml_bvalues = tmp.sml_bvalues;
 
                *modtail = mod;
index 543594a5d2fb68758a6d07243db1270ae88b5222..ebe470ce5a9e9b6d724648ba447af24cc11f47ab 100644 (file)
@@ -116,11 +116,8 @@ do_modify(
                        goto cleanup;
                }
 
-               mod = (Modifications *) ch_malloc( sizeof(Modifications) 
-                       + tmp.sml_type.bv_len + 1);
-               mod->sml_type.bv_val = (char *)(mod+1);
-               strcpy(mod->sml_type.bv_val, tmp.sml_type.bv_val);
-               mod->sml_type.bv_len = tmp.sml_type.bv_len;
+               mod = (Modifications *) ch_malloc( sizeof(Modifications) );
+               mod->sml_type = tmp.sml_type;
                mod->sml_bvalues = tmp.sml_bvalues;
                mod->sml_desc = NULL;
                *modtail = mod;
@@ -595,6 +592,7 @@ int slap_mods_opattrs(
                if ( tmpval.bv_len ) {
                        mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
                        mod->sml_op = mop;
+                       mod->sml_type.bv_val = NULL;
                        mod->sml_desc = slap_schema.si_ad_structuralObjectClass;
                        mod->sml_bvalues = (BVarray) ch_malloc( 2 * sizeof( struct berval ) );
                        ber_dupbv( &mod->sml_bvalues[0], &tmpval );
@@ -609,6 +607,7 @@ int slap_mods_opattrs(
                
                mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
                mod->sml_op = mop;
+               mod->sml_type.bv_val = NULL;
                mod->sml_desc = slap_schema.si_ad_entryUUID;
                mod->sml_bvalues = (BVarray) ch_malloc( 2 * sizeof( struct berval ) );
                ber_dupbv( &mod->sml_bvalues[0], &tmpval );
@@ -619,6 +618,7 @@ int slap_mods_opattrs(
 
                mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
                mod->sml_op = mop;
+               mod->sml_type.bv_val = NULL;
                mod->sml_desc = slap_schema.si_ad_creatorsName;
                mod->sml_bvalues = (BVarray) ch_malloc( 2 * sizeof( struct berval ) );
                ber_dupbv( &mod->sml_bvalues[0], &name );
@@ -629,6 +629,7 @@ int slap_mods_opattrs(
 
                mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
                mod->sml_op = mop;
+               mod->sml_type.bv_val = NULL;
                mod->sml_desc = slap_schema.si_ad_createTimestamp;
                mod->sml_bvalues = (BVarray) ch_malloc( 2 * sizeof( struct berval ) );
                ber_dupbv( &mod->sml_bvalues[0], &timestamp );
@@ -640,6 +641,7 @@ int slap_mods_opattrs(
 
        mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
        mod->sml_op = mop;
+       mod->sml_type.bv_val = NULL;
        mod->sml_desc = slap_schema.si_ad_entryCSN;
        mod->sml_bvalues = (BVarray) ch_malloc( 2 * sizeof( struct berval ) );
        ber_dupbv( &mod->sml_bvalues[0], &csn );
@@ -650,6 +652,7 @@ int slap_mods_opattrs(
 
        mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
        mod->sml_op = mop;
+       mod->sml_type.bv_val = NULL;
        mod->sml_desc = slap_schema.si_ad_modifiersName;
        mod->sml_bvalues = (BVarray) ch_malloc( 2 * sizeof( struct berval ) );
        ber_dupbv( &mod->sml_bvalues[0], &name );
@@ -660,6 +663,7 @@ int slap_mods_opattrs(
 
        mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
        mod->sml_op = mop;
+       mod->sml_type.bv_val = NULL;
        mod->sml_desc = slap_schema.si_ad_modifyTimestamp;
        mod->sml_bvalues = (BVarray) ch_malloc( 2 * sizeof( struct berval ) );
        ber_dupbv( &mod->sml_bvalues[0], &timestamp );
index d9b88aca1c42df97fead7a20a5408a95a225b0b8..1aa87afd480c02b093e55c875725e98024265080 100644 (file)
@@ -24,6 +24,8 @@ slap_mod_free(
        int                             freeit
 )
 {
+       if ( mod->sm_type.bv_val)
+               free( mod->sm_type.bv_val );
        if ( mod->sm_bvalues != NULL )
                bvarray_free( mod->sm_bvalues );