From 843e327a39e1ba023001fbbbe89733a431956549 Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Fri, 9 Mar 2007 17:23:16 +0000 Subject: [PATCH] fix previous commit (ITS#4861) --- servers/slapd/back-ldap/bind.c | 6 ++++-- servers/slapd/back-ldap/search.c | 17 ++++++++++------- servers/slapd/back-meta/bind.c | 8 ++++---- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/servers/slapd/back-ldap/bind.c b/servers/slapd/back-ldap/bind.c index 70895b5033..d4bb36ab8b 100644 --- a/servers/slapd/back-ldap/bind.c +++ b/servers/slapd/back-ldap/bind.c @@ -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 ); diff --git a/servers/slapd/back-ldap/search.c b/servers/slapd/back-ldap/search.c index f30fdc5ae1..1ec5e13a18 100644 --- a/servers/slapd/back-ldap/search.c +++ b/servers/slapd/back-ldap/search.c @@ -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 ); } diff --git a/servers/slapd/back-meta/bind.c b/servers/slapd/back-meta/bind.c index e9772150d8..717462ffab 100644 --- a/servers/slapd/back-meta/bind.c +++ b/servers/slapd/back-meta/bind.c @@ -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 ); -- 2.39.5