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.
This commit is contained in:
Christopher Haster
2025-12-31 12:23:35 -06:00
parent 3659a5c8c4
commit 75875bc374
2 changed files with 6 additions and 0 deletions
+3
View File
@@ -1958,6 +1958,9 @@ getopt_done: ;
bench_define_cleanup(); bench_define_cleanup();
if (bench_override_defines) { if (bench_override_defines) {
for (size_t i = 0; i < bench_override_define_count; i++) { 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[i].data);
} }
free((void*)bench_override_defines); free((void*)bench_override_defines);
+3
View File
@@ -2639,6 +2639,9 @@ getopt_done:;
test_define_cleanup(); test_define_cleanup();
if (test_override_defines) { if (test_override_defines) {
for (size_t i = 0; i < test_override_define_count; i++) { 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[i].data);
} }
free((void*)test_override_defines); free((void*)test_override_defines);