mirror of
https://github.com/git/git.git
synced 2024-10-28 04:49:43 +01:00
http-push: clean up local_refs at exit
We allocate a list of ref structs from get_local_heads() but never clean it up. We should do so before exiting to avoid complaints from the leak-checker. Note that we have to initialize it to NULL, because there's one code path that can jump to the cleanup label before we assign to it. Fixing this lets us mark t5540 as leak-free. Curiously building with SANITIZE=leak and gcc does not seem to find this problem, but switching to clang does. It seems like a fairly obvious leak, though. I was curious that the matching remote_refs did not have the same leak. But that is because we store the list in a global variable, so it's still reachable after we exit. Arguably we could treat it the same as future-proofing, but I didn't bother (now that the script is marked leak-free, anybody moving it to a stack variable will notice). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
9699327945
commit
f4c768c639
2 changed files with 3 additions and 1 deletions
|
@ -1719,7 +1719,7 @@ int cmd_main(int argc, const char **argv)
|
|||
int rc = 0;
|
||||
int i;
|
||||
int new_refs;
|
||||
struct ref *ref, *local_refs;
|
||||
struct ref *ref, *local_refs = NULL;
|
||||
|
||||
CALLOC_ARRAY(repo, 1);
|
||||
|
||||
|
@ -1997,6 +1997,7 @@ int cmd_main(int argc, const char **argv)
|
|||
}
|
||||
|
||||
refspec_clear(&rs);
|
||||
free_refs(local_refs);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ This test runs various sanity checks on http-push.'
|
|||
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
||||
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./test-lib.sh
|
||||
|
||||
if git http-push > /dev/null 2>&1 || [ $? -eq 128 ]
|
||||
|
|
Loading…
Reference in a new issue