From: Andreas Schneider Date: Mon, 14 Oct 2024 13:52:53 +0000 (+0200) Subject: lib:ldb:tests: Fix memory leaks in ldb_lmdb_free_list_test X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f7812173e40b7c5a019ddfd6cc331a5c5d473611;p=thirdparty%2Fsamba.git lib:ldb:tests: Fix memory leaks in ldb_lmdb_free_list_test Found by Leak Sanitizer Signed-off-by: Andreas Schneider Reviewed-by: Douglas Bagnall Reviewed-by: Anoop C S Autobuild-User(master): Anoop C S Autobuild-Date(master): Wed Oct 29 12:18:43 UTC 2025 on atb-devel-224 --- diff --git a/lib/ldb/tests/ldb_lmdb_free_list_test.c b/lib/ldb/tests/ldb_lmdb_free_list_test.c index 87451837583..27bfa7dd029 100644 --- a/lib/ldb/tests/ldb_lmdb_free_list_test.c +++ b/lib/ldb/tests/ldb_lmdb_free_list_test.c @@ -198,7 +198,9 @@ static int parse(struct ldb_val key, struct ldb_val data, void *private_data) { struct ldb_val *read = private_data; - /* Yes, we leak this. That is OK */ + /* + * This should not leak if possible, please check with Leak Sanitizer. + */ read->data = talloc_size(NULL, data.length); assert_non_null(read->data); @@ -218,8 +220,8 @@ static void test_free_list_no_read_lock(void **state) struct test_ctx *test_ctx = talloc_get_type_abort(*state, struct test_ctx); struct ldb_kv_private *ldb_kv = get_ldb_kv(test_ctx->ldb); - struct ldb_val key; - struct ldb_val val; + struct ldb_val key = {}; + struct ldb_val val = {}; const char *KEY1 = "KEY01"; @@ -341,6 +343,7 @@ static void test_free_list_no_read_lock(void **state) ret = ldb_kv->kv_ops->fetch_and_parse(ldb_kv, key, parse, &val); assert_int_equal(ret, LDB_SUCCESS); + TALLOC_FREE(val.data); ret = ldb_kv->kv_ops->unlock_read(test_ctx->ldb->modules); assert_int_equal(ret, LDB_SUCCESS); @@ -361,8 +364,8 @@ static void test_free_list_read_lock(void **state) struct test_ctx *test_ctx = talloc_get_type_abort(*state, struct test_ctx); struct ldb_kv_private *ldb_kv = get_ldb_kv(test_ctx->ldb); - struct ldb_val key; - struct ldb_val val; + struct ldb_val key = {}; + struct ldb_val val = {}; const char *KEY1 = "KEY01"; @@ -450,6 +453,7 @@ static void test_free_list_read_lock(void **state) ret = ldb_kv->kv_ops->fetch_and_parse(ldb_kv, key, parse, &val); assert_int_equal(ret, LDB_SUCCESS); + TALLOC_FREE(val.data); ret = ldb_kv->kv_ops->unlock_read(ldb->modules); assert_int_equal(ret, LDB_SUCCESS); @@ -492,6 +496,7 @@ static void test_free_list_read_lock(void **state) ret = ldb_kv->kv_ops->fetch_and_parse(ldb_kv, key, parse, &val); assert_int_equal(ret, LDB_ERR_NO_SUCH_OBJECT); + TALLOC_FREE(val.data); ret = ldb_kv->kv_ops->unlock_read(test_ctx->ldb->modules); assert_int_equal(ret, 0); @@ -510,8 +515,8 @@ static void test_free_list_stale_reader(void **state) struct test_ctx *test_ctx = talloc_get_type_abort(*state, struct test_ctx); struct ldb_kv_private *ldb_kv = get_ldb_kv(test_ctx->ldb); - struct ldb_val key; - struct ldb_val val; + struct ldb_val key = {}; + struct ldb_val val = {}; const char *KEY1 = "KEY01"; @@ -639,6 +644,7 @@ static void test_free_list_stale_reader(void **state) ret = ldb_kv->kv_ops->fetch_and_parse(ldb_kv, key, parse, &val); assert_int_equal(ret, LDB_SUCCESS); + TALLOC_FREE(val.data); ret = ldb_kv->kv_ops->unlock_read(test_ctx->ldb->modules); assert_int_equal(ret, LDB_SUCCESS);