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

index 33e45344250348ddecb1ba08df9b546e00377d7e..e26db39b8589c98369e6c33cb1ca9ea55e840b69 100644 (file)
@@ -1382,7 +1382,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;
@@ -1397,7 +1397,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 %03ld dn get failed (%d)",
@@ -1412,13 +1411,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_alloc();
@@ -1493,7 +1494,7 @@ syncrepl_message_to_entry(
        }
 
 done:
-       ber_free ( ber, 0 );
+       ber_free( ber, 0 );
        if ( rc != LDAP_SUCCESS ) {
                if ( e ) {
                        entry_free( e );