From: Ondřej Kuzník Date: Fri, 5 Jan 2024 12:48:01 +0000 (+0000) Subject: ITS#10151 Make sure we release scratch objects on "error" X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b8999d165cad6251a4e47707b71864583d1cc304;p=thirdparty%2Fopenldap.git ITS#10151 Make sure we release scratch objects on "error" --- diff --git a/servers/slapd/syncrepl.c b/servers/slapd/syncrepl.c index 80317f51fd..32f6ef7821 100644 --- a/servers/slapd/syncrepl.c +++ b/servers/slapd/syncrepl.c @@ -1448,6 +1448,8 @@ do_syncrep2( "got search entry without " "Sync State control (%s)\n", si->si_ridtxt, bdn.bv_val ); rc = -1; + if ( rctrls ) + ldap_controls_free( rctrls ); goto done; } ber_init2( ber, &rctrlp->ldctl_value, LBER_USE_DER ); @@ -1505,8 +1507,10 @@ do_syncrep2( si->si_too_old = 0; /* check pending CSNs too */ - if (( rc = get_pmutex( si ))) + if (( rc = get_pmutex( si ))) { + ldap_controls_free( rctrls ); goto done; + } i = check_csn_age( si, &bdn, syncCookie.ctxcsn, sid, (cookie_vals *)&si->si_cookieState->cs_pvals, &slot ); if ( i == CV_CSN_OK ) { @@ -1570,8 +1574,12 @@ logerr: &modlist, &entry, syncstate, syncUUID ) ) == LDAP_SUCCESS ) { if ( punlock < 0 ) { - if (( rc = get_pmutex( si ))) + if (( rc = get_pmutex( si ))) { + ldap_controls_free( rctrls ); + slap_mods_free( modlist, 1 ); + entry_free( entry ); goto done; + } } if ( ( rc = syncrepl_entry( si, op, entry, &modlist, syncstate, syncUUID, syncCookie.ctxcsn ) ) == LDAP_SUCCESS &&