From: Howard Chu Date: Tue, 9 Jun 2026 23:17:59 +0000 (+0100) Subject: ITS#10520 LMDB: cleanup on crypto errors and exits X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=133bb65825a4c0c46e06fbdc2218131b61eade2c;p=thirdparty%2Fopenldap.git ITS#10520 LMDB: cleanup on crypto errors and exits --- diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 6e5a4a9797..6a435cc801 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -6439,8 +6439,10 @@ mdb_env_close_active(MDB_env *env, int excl) if (env->me_rpages) { MDB_ID3L el = env->me_rpages; unsigned int x; - for (x=1; x<=el[0].mid; x++) + for (x=1; x<=el[0].mid; x++) { munmap(el[x].mptr, el[x].mcnt * env->me_psize); + free(el[x].menc); + } free(el); } } @@ -7110,8 +7112,10 @@ retry: id3.mid = pg0; if (env->me_encfunc || env->me_sumfunc) { rc = mdb_rpage_encsum(env, &id3, rem, numpgs); - if (rc) + if (rc) { + free(id3.menc); goto fail; + } el[x].muse = id3.muse; } pthread_mutex_unlock(&env->me_rpmutex); @@ -7178,8 +7182,10 @@ fail: } if (env->me_encfunc || env->me_sumfunc) { rc = mdb_rpage_encsum(env, &id3, rem, numpgs); - if (rc) + if (rc) { + free(id3.menc); goto fail; + } } mdb_mid3l_insert(el, &id3); pthread_mutex_unlock(&env->me_rpmutex); diff --git a/libraries/liblmdb/mdb_dump.c b/libraries/liblmdb/mdb_dump.c index a31797f5d8..5a6734ba60 100644 --- a/libraries/liblmdb/mdb_dump.c +++ b/libraries/liblmdb/mdb_dump.c @@ -154,6 +154,7 @@ static int dumpit(MDB_txn *txn, MDB_dbi dbi, char *name) printf("DATA=END\n"); if (rc == MDB_NOTFOUND) rc = MDB_SUCCESS; + mdb_cursor_close(mc); return rc; }