]> git.sur5r.net Git - openldap/commitdiff
fix previous commit (ITS#4861)
authorPierangelo Masarati <ando@openldap.org>
Fri, 9 Mar 2007 17:23:16 +0000 (17:23 +0000)
committerPierangelo Masarati <ando@openldap.org>
Fri, 9 Mar 2007 17:23:16 +0000 (17:23 +0000)
servers/slapd/back-ldap/bind.c
servers/slapd/back-ldap/search.c
servers/slapd/back-meta/bind.c

index 70895b5033554d6f03c82fb0a78e696be5255893..d4bb36ab8bf2d53816cbf9c5888e60728f44bc5a 100644 (file)
@@ -1651,8 +1651,6 @@ retry:;
                                rs->sr_err = LDAP_NO_SUCH_OBJECT;
                        }
 
-                       ber_memvfree( (void **)refs );
-
                        if ( ctrls != NULL ) {
                                rs->sr_ctrls = ctrls;
                        }
@@ -1711,6 +1709,10 @@ retry:;
                rs->sr_ref = NULL;
        }
 
+       if ( refs ) {
+               ber_memvfree( (void **)refs );
+       }
+
        if ( ctrls ) {
                assert( rs->sr_ctrls != NULL );
                ldap_controls_free( ctrls );
index f30fdc5ae10a71356ff5e97191b1c01bb4be4979..1ec5e13a182b8c861195bde4945dc0f3a4194f41 100644 (file)
@@ -158,6 +158,8 @@ ldap_back_search(
        int             freetext = 0;
        int             do_retry = 1, dont_retry = 0;
        LDAPControl     **ctrls = NULL;
+       char            **references = NULL;
+
        /* FIXME: shouldn't this be null? */
        const char      *save_matched = rs->sr_matched;
 
@@ -356,8 +358,6 @@ retry:
                        }
 
                } else if ( rc == LDAP_RES_SEARCH_REFERENCE ) {
-                       char            **references = NULL;
-
                        do_retry = 0;
                        rc = ldap_parse_reference( lc->lc_ld, res,
                                        &references, &rs->sr_ctrls, 1 );
@@ -398,6 +398,7 @@ retry:
                                ber_memvfree( (void **)references );
                                op->o_tmpfree( rs->sr_ref, op->o_tmpmemctx );
                                rs->sr_ref = NULL;
+                               references = NULL;
                        }
 
                        if ( rs->sr_ctrls ) {
@@ -406,7 +407,7 @@ retry:
                        }
 
                } else {
-                       char            **references = NULL, *err = NULL;
+                       char            *err = NULL;
 
                        rc = ldap_parse_result( lc->lc_ld, res, &rs->sr_err,
                                        &match.bv_val, &err,
@@ -444,7 +445,7 @@ retry:
 
                                        for ( cnt = 0; references[ cnt ]; cnt++ ) {
                                                /* duplicating ...*/
-                                               ber_str2bv( references[ cnt ], 0, 1, &rs->sr_ref[ cnt ] );
+                                               ber_str2bv( references[ cnt ], 0, 0, &rs->sr_ref[ cnt ] );
                                        }
                                        BER_BVZERO( &rs->sr_ref[ cnt ] );
                                }
@@ -460,8 +461,6 @@ retry:
                                rs->sr_err = LDAP_NO_SUCH_OBJECT;
                        }
 
-                       ber_memvfree( (void **)references );
-
                        if ( match.bv_val != NULL ) {
 #ifndef LDAP_NULL_IS_NULL
                                if ( match.bv_val[ 0 ] == '\0' ) {
@@ -566,10 +565,14 @@ finish:;
        }
 
        if ( rs->sr_ref ) {
-               ber_bvarray_free_x( rs->sr_ref, op->o_tmpmemctx );
+               op->o_tmpfree( rs->sr_ref, op->o_tmpmemctx );
                rs->sr_ref = NULL;
        }
 
+       if ( references ) {
+               ber_memvfree( (void **)references );
+       }
+
        if ( attrs ) {
                ch_free( attrs );
        }
index e9772150d8825b5d70df16353eed062a8f3e9145..717462ffab24a39d0e70cca2a27bce17ff692809 100644 (file)
@@ -1003,8 +1003,6 @@ retry:;
                                        rs->sr_err = LDAP_NO_SUCH_OBJECT;
                                }
 
-                               ber_memvfree( (void **)refs );
-
                                if ( ctrls != NULL ) {
                                        rs->sr_ctrls = ctrls;
                                }
@@ -1148,9 +1146,11 @@ retry:;
                ldap_memfree( text );
        }
        if ( rs->sr_ref ) {
-               assert( refs != NULL );
-               ber_memvfree( (void **)refs );
                op->o_tmpfree( rs->sr_ref, op->o_tmpmemctx );
+               rs->sr_ref = NULL;
+       }
+       if ( refs ) {
+               ber_memvfree( (void **)refs );
        }
        if ( ctrls ) {
                assert( rs->sr_ctrls != NULL );