From 17ddf59bf767d733fdf55e3a464d5dd621a0f5bb Mon Sep 17 00:00:00 2001 From: Adam Tkac Date: Mon, 24 Apr 2017 16:00:21 +0200 Subject: [PATCH] Ticket 49234: Don't release id2entry when we didn't get it Bug Description: Some of my in-progress work depends on assumption that dblayer_get_id2entry() is always correctly paired with dblayer_release_id2entry(). However this isn't currently true for ldap/servers/slapd/back-ldbm/id2entry.c:id2entry() function because following callpath can happen (pseudocode): 1. cache_find_id() finds entry -> goto bail 2. in the bail section dblayer_release_id2entry() is called without previous dblayer_get_id2entry() Fix Description: Just return entry when found and don't go through bail section. https://pagure.io/389-ds-base/issue/49234 Author: Adam Tkac --- ldap/servers/slapd/back-ldbm/id2entry.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ldap/servers/slapd/back-ldbm/id2entry.c b/ldap/servers/slapd/back-ldbm/id2entry.c index 824938c..19f2aa0 100644 --- a/ldap/servers/slapd/back-ldbm/id2entry.c +++ b/ldap/servers/slapd/back-ldbm/id2entry.c @@ -265,10 +265,10 @@ id2entry( backend *be, ID id, back_txn *txn, int *err ) "=> id2entry(%lu)\n", (u_long)id); if ( (e = cache_find_id( &inst->inst_cache, id )) != NULL ) { - slapi_log_err(SLAPI_LOG_TRACE, ID2ENTRY, + slapi_log_err(SLAPI_LOG_TRACE, ID2ENTRY, "<= id2entry %p, dn \"%s\" (cache)\n", e, backentry_get_ndn(e)); - goto bail; + return( e ); } *err = dblayer_get_id2entry( be, &db ); @@ -278,7 +278,6 @@ id2entry( backend *be, ID id, back_txn *txn, int *err ) return( NULL ); } - id_internal_to_stored(id,temp_id); key.data = temp_id; -- 2.9.3