From 1c31e03b622c896834fbfc97456f4493a09d55e3 Mon Sep 17 00:00:00 2001 From: Quanah Gibson-Mount Date: Tue, 15 Apr 2008 01:43:59 +0000 Subject: [PATCH] ITS#5340 --- CHANGES | 1 + servers/slapd/result.c | 26 ++++++++++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index b17e5c9713..76faaceb79 100644 --- 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) diff --git a/servers/slapd/result.c b/servers/slapd/result.c index 795c9272ca..f81ca9f482 100644 --- a/servers/slapd/result.c +++ b/servers/slapd/result.c @@ -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]; -- 2.39.5