check-ref-format: fix trivial memory leak

Fix a memory leak in "git check-ref-format" that's been present in the
code in one form or another since 38eedc634b (git check-ref-format
--print, 2009-10-12), the code got substantially refactored in
cfbe22f03f (check-ref-format: handle subcommands in separate
functions, 2010-08-05).

As a result we can mark a test as passing with SANITIZE=leak using
"TEST_PASSES_SANITIZE_LEAK=true".

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2022-07-01 12:42:50 +02:00 committed by Junio C Hamano
parent e4a4b31577
commit 99b6c45d8f
2 changed files with 9 additions and 3 deletions

View File

@ -57,6 +57,8 @@ int cmd_check_ref_format(int argc, const char **argv, const char *prefix)
int normalize = 0; int normalize = 0;
int flags = 0; int flags = 0;
const char *refname; const char *refname;
char *to_free = NULL;
int ret = 1;
if (argc == 2 && !strcmp(argv[1], "-h")) if (argc == 2 && !strcmp(argv[1], "-h"))
usage(builtin_check_ref_format_usage); usage(builtin_check_ref_format_usage);
@ -81,11 +83,14 @@ int cmd_check_ref_format(int argc, const char **argv, const char *prefix)
refname = argv[i]; refname = argv[i];
if (normalize) if (normalize)
refname = collapse_slashes(refname); refname = to_free = collapse_slashes(refname);
if (check_refname_format(refname, flags)) if (check_refname_format(refname, flags))
return 1; goto cleanup;
if (normalize) if (normalize)
printf("%s\n", refname); printf("%s\n", refname);
return 0; ret = 0;
cleanup:
free(to_free);
return ret;
} }

View File

@ -2,6 +2,7 @@
test_description='Test git check-ref-format' test_description='Test git check-ref-format'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh
valid_ref() { valid_ref() {