]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
fix leak (ITS#4805)
authorPierangelo Masarati <ando@openldap.org>
Mon, 15 Jan 2007 15:04:47 +0000 (15:04 +0000)
committerPierangelo Masarati <ando@openldap.org>
Mon, 15 Jan 2007 15:04:47 +0000 (15:04 +0000)
servers/slapd/syncrepl.c

index e831b962a6a03dfe0ee895a05b679333ac5cf8ae..ffe7323455228f877ac6794819a00a270f990f11 100644 (file)
@@ -1462,7 +1462,7 @@ syncrepl_message_to_entry(
        char txtbuf[SLAP_TEXT_BUFLEN];
        size_t textlen = sizeof txtbuf;
 
-       struct berval   bdn = {0, NULL}, dn, ndn;
+       struct berval   bdn = BER_BVNULL, dn, ndn;
        int             rc;
 
        *modlist = NULL;
@@ -1477,7 +1477,6 @@ syncrepl_message_to_entry(
        op->o_tag = LDAP_REQ_ADD;
 
        rc = ldap_get_dn_ber( si->si_ld, msg, &ber, &bdn );
-
        if ( rc != LDAP_SUCCESS ) {
                Debug( LDAP_DEBUG_ANY,
                        "syncrepl_message_to_entry: rid %03d dn get failed (%d)",
@@ -1492,13 +1491,15 @@ syncrepl_message_to_entry(
        slap_sl_free( dn.bv_val, op->o_tmpmemctx );
 
        if ( syncstate == LDAP_SYNC_PRESENT || syncstate == LDAP_SYNC_DELETE ) {
-               if ( entry )
-                       *entry = NULL;
-               return LDAP_SUCCESS;
+               /* NOTE: this could be done even before decoding the DN,
+                * although encoding errors wouldn't be detected */
+               rc = LDAP_SUCCESS;
+               goto done;
        }
 
        if ( entry == NULL ) {
-               return -1;
+               rc = -1;
+               goto done;
        }
 
        e = ( Entry * ) ch_calloc( 1, sizeof( Entry ) );
@@ -1574,7 +1575,7 @@ syncrepl_message_to_entry(
        }
 
 done:
-       ber_free ( ber, 0 );
+       ber_free( ber, 0 );
        if ( rc != LDAP_SUCCESS ) {
                if ( e ) {
                        entry_free( e );