From 75875bc37452f738730cd5a1dd9a794524176999 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Wed, 31 Dec 2025 12:23:35 -0600 Subject: [PATCH] runners: Fixed (bounded) memory leak with define overrides This was resulting in memory leak warnings from Valgrind, which were getting in the way of debugging an unrelated uninitialized memory issue. We normally wouldn't care about this sort of bounded memory leaks, but in this case Valgrind can't tell if the memory leak is from the runner or filesystem, errors, and prevents other tests from running. Just to be more annoying, this only triggered when overriding defines, which is something you do exactly when you are trying to debug something. Fortunately, with a bit of typecasting we still have access to the allocated value arrays (type-stripped due to opaque test_define_t), and can clean up the relevant memory. --- runners/bench_runner.c | 3 +++ runners/test_runner.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/runners/bench_runner.c b/runners/bench_runner.c index 4f2b23a9..2e927174 100644 --- a/runners/bench_runner.c +++ b/runners/bench_runner.c @@ -1958,6 +1958,9 @@ getopt_done: ; bench_define_cleanup(); if (bench_override_defines) { for (size_t i = 0; i < bench_override_define_count; i++) { + free((void*)( + (const bench_override_data_t*) + bench_override_defines[i].data)->values); free((void*)bench_override_defines[i].data); } free((void*)bench_override_defines); diff --git a/runners/test_runner.c b/runners/test_runner.c index ae7b3a7f..ff1338be 100644 --- a/runners/test_runner.c +++ b/runners/test_runner.c @@ -2639,6 +2639,9 @@ getopt_done:; test_define_cleanup(); if (test_override_defines) { for (size_t i = 0; i < test_override_define_count; i++) { + free((void*)( + (const test_override_data_t*) + test_override_defines[i].data)->values); free((void*)test_override_defines[i].data); } free((void*)test_override_defines);