]> git.sur5r.net Git - openldap/commitdiff
ITS#5340
authorQuanah Gibson-Mount <quanah@openldap.org>
Tue, 15 Apr 2008 01:43:59 +0000 (01:43 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Tue, 15 Apr 2008 01:43:59 +0000 (01:43 +0000)
CHANGES
servers/slapd/result.c

diff --git a/CHANGES b/CHANGES
index b17e5c97136855097fb080413f4c1cca5c93ce72..76faaceb79ef2e13f1ca0cb565cc16217888366d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -12,6 +12,7 @@ OpenLDAP 2.4.9 Engineering
        Fixed slapd pointer dereference (ITS#5388)
        Fixed slapd null argument dereference (ITS#5435)
        Fixed slapd sets attribute description parsing (ITS#5402)
+       Fixed slapd REP_ENTRY flags (ITS#5340)
        Fixed slapd syncrepl hang on back-config (ITS#5407)
        Fixed slapd syncrepl compare_csns crash (ITS#5413)
        Fixed slapd syncrepl contextCSN update clash (ITS#5426)
index 795c9272ca23a4a5b9afb7a0f406356525ee592f..f81ca9f4824c375c00235409d743a4bbcb1e11f8 100644 (file)
@@ -522,14 +522,20 @@ clean2:;
                (void)slap_cleanup_play( op, rs );
        }
 
-       if ( rs->sr_matched && rs->sr_flags & REP_MATCHED_MUSTBEFREED ) {
-               free( (char *)rs->sr_matched );
-               rs->sr_matched = NULL;
+       if ( rs->sr_flags & REP_MATCHED_MUSTBEFREED ) {
+               rs->sr_flags ^= REP_MATCHED_MUSTBEFREED; /* paranoia */
+               if ( rs->sr_matched ) {
+                       free( (char *)rs->sr_matched );
+                       rs->sr_matched = NULL;
+               }
        }
 
-       if ( rs->sr_ref && rs->sr_flags & REP_REF_MUSTBEFREED ) {
-               ber_bvarray_free( rs->sr_ref );
-               rs->sr_ref = NULL;
+       if ( rs->sr_flags & REP_REF_MUSTBEFREED ) {
+               rs->sr_flags ^= REP_REF_MUSTBEFREED; /* paranoia */
+               if ( rs->sr_ref ) {
+                       ber_bvarray_free( rs->sr_ref );
+                       rs->sr_ref = NULL;
+               }
        }
 
        return rc;
@@ -625,6 +631,14 @@ slap_send_ldap_result( Operation *op, SlapReply *rs )
        rs->sr_msgid = (rs->sr_tag != LBER_SEQUENCE) ? op->o_msgid : 0;
 
 abandon:
+       if ( rs->sr_flags & REP_REF_MUSTBEFREED ) {
+               if ( rs->sr_ref == NULL ) {
+                       rs->sr_flags ^= REP_REF_MUSTBEFREED;
+                       ber_bvarray_free( oref );
+               }
+               oref = NULL; /* send_ldap_response() will free rs->sr_ref if != NULL */
+       }
+
        if ( send_ldap_response( op, rs ) == SLAP_CB_CONTINUE ) {
                if ( op->o_tag == LDAP_REQ_SEARCH ) {
                        char nbuf[64];