]> git.ipfire.org Git - thirdparty/git.git/commitdiff
tests: fix a memory leak in test-parse-options.c
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Thu, 7 Oct 2021 10:01:32 +0000 (12:01 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 7 Oct 2021 22:40:15 +0000 (15:40 -0700)
Fix a memory leak in t/helper/test-parse-options.c, we were not
freeing the allocated "struct string_list" or its items. Let's move
the declaration of the "list" variable into the cmd__parse_options()
and release it at the end.

In c8ba1639165 (parse-options: add OPT_STRING_LIST helper, 2011-06-09)
the "list" variable was added, and later on in
c8ba1639165 (parse-options: add OPT_STRING_LIST helper, 2011-06-09)
the "expect" was added.

The "list" variable was last touched in 2721ce21e43 (use string_list
initializer consistently, 2016-06-13), but it was still left at the
static scope, it's better to move it to the function for consistency.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/helper/test-parse-options.c
t/t0040-parse-options.sh

index a282b6ff13e56196a36b951b4a9f7540f5ba2666..48d3cf6692da0612eff2f8c61051780ef944def6 100644 (file)
@@ -14,7 +14,6 @@ static int dry_run = 0, quiet = 0;
 static char *string = NULL;
 static char *file = NULL;
 static int ambiguous;
-static struct string_list list = STRING_LIST_INIT_NODUP;
 
 static struct {
        int called;
@@ -107,6 +106,8 @@ int cmd__parse_options(int argc, const char **argv)
                NULL
        };
        struct string_list expect = STRING_LIST_INIT_NODUP;
+       struct string_list list = STRING_LIST_INIT_NODUP;
+
        struct option options[] = {
                OPT_BOOL(0, "yes", &boolean, "get a boolean"),
                OPT_BOOL('D', "no-doubt", &boolean, "begins with 'no-'"),
@@ -185,5 +186,9 @@ int cmd__parse_options(int argc, const char **argv)
        for (i = 0; i < argc; i++)
                show(&expect, &ret, "arg %02d: %s", i, argv[i]);
 
+       expect.strdup_strings = 1;
+       string_list_clear(&expect, 0);
+       string_list_clear(&list, 0);
+
        return ret;
 }
index da310ed29b15b320916a0eea8181e3b4c5211f64..ed422a1a61631b8a98b24834e3730d4ae622ad76 100755 (executable)
@@ -5,6 +5,7 @@
 
 test_description='our own option parser'
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 cat >expect <<\EOF