See https://lore.kernel.org/git/cover-v3-00.19-00000000000-20230110T054138Z-avarab@xxxxxxxxx/ for the v3. Change since then: * Reword the subject of a commit message that no longer matched its content/body (thanks René). * Re-ran "GIT_TEST_PASSING_SANITIZE_LEAK=check GIT_TEST_SANITIZE_LEAK_LOG=true make SANITIZE=leak test" with "git rebase -i -x", so and updated the leak markings for other fixes that have landed on "master" since they were last updated. The tip of this (and all intermediate commits) pass the "check" mode. Ævar Arnfjörð Bjarmason (19): tests: mark tests as passing with SANITIZE=leak bundle.c: don't leak the "args" in the "struct child_process" commit-graph: use free_commit_graph() instead of UNLEAK() clone: use free() instead of UNLEAK() various: add missing clear_pathspec(), fix leaks name-rev: don't xstrdup() an already dup'd string repack: fix leaks on error with "goto cleanup" worktree: fix a trivial leak in prune_worktrees() http-backend.c: fix "dir" and "cmd_arg" leaks in cmd_main() http-backend.c: fix cmd_main() memory leak, refactor reg{exec,free}() commit-graph: fix a parse_options_concat() leak show-branch: free() allocated "head" before return builtin/merge.c: use fixed strings, not "strbuf", fix leak builtin/merge.c: free "&buf" on "Your local changes..." error object-file.c: release the "tag" in check_tag() grep.c: refactor free_grep_patterns() grep API: plug memory leaks by freeing "header_list" receive-pack: free() the "ref_name" in "struct command" push: free_refs() the "local_refs" in set_refspecs() archive.c | 1 + builtin/clean.c | 1 + builtin/clone.c | 5 +++-- builtin/commit-graph.c | 10 ++++++---- builtin/merge.c | 14 ++++++------- builtin/name-rev.c | 23 ++++++++++------------ builtin/push.c | 1 + builtin/receive-pack.c | 10 ++++++++++ builtin/repack.c | 13 ++++++------ builtin/reset.c | 11 ++++++++--- builtin/show-branch.c | 1 + builtin/stash.c | 7 +++++-- builtin/worktree.c | 6 +++--- bundle.c | 6 ++++-- grep.c | 15 +++++++++----- http-backend.c | 9 +++++++-- object-file.c | 1 + t/t0023-crlf-am.sh | 1 + t/t1301-shared-repo.sh | 1 + t/t1302-repo-version.sh | 1 + t/t1304-default-acl.sh | 1 + t/t1408-packed-refs.sh | 1 + t/t1410-reflog.sh | 1 + t/t1416-ref-transaction-hooks.sh | 1 + t/t2401-worktree-prune.sh | 1 + t/t2402-worktree-list.sh | 1 + t/t2406-worktree-repair.sh | 1 + t/t3203-branch-output.sh | 2 ++ t/t3210-pack-refs.sh | 1 + t/t3800-mktag.sh | 1 + t/t4152-am-subjects.sh | 2 ++ t/t4254-am-corrupt.sh | 2 ++ t/t4256-am-format-flowed.sh | 1 + t/t4257-am-interactive.sh | 2 ++ t/t5001-archive-attr.sh | 1 + t/t5004-archive-corner-cases.sh | 2 ++ t/t5302-pack-index.sh | 2 ++ t/t5317-pack-objects-filter-objects.sh | 1 + t/t5330-no-lazy-fetch-with-commit-graph.sh | 1 + t/t5403-post-checkout-hook.sh | 1 + t/t5405-send-pack-rewind.sh | 1 + t/t5406-remote-rejects.sh | 1 + t/t5502-quickfetch.sh | 1 + t/t5504-fetch-receive-strict.sh | 1 + t/t5507-remote-environment.sh | 2 ++ t/t5522-pull-symlink.sh | 1 + t/t5523-push-upstream.sh | 1 + t/t5527-fetch-odd-refs.sh | 1 + t/t5529-push-errors.sh | 2 ++ t/t5546-receive-limits.sh | 2 ++ t/t5547-push-quarantine.sh | 2 ++ t/t5560-http-backend-noserver.sh | 1 + t/t5561-http-backend.sh | 1 + t/t5562-http-backend-content-length.sh | 2 ++ t/t5604-clone-reference.sh | 1 + t/t5606-clone-options.sh | 1 + t/t5613-info-alternate.sh | 2 ++ t/t5705-session-id-in-capabilities.sh | 1 + t/t5810-proto-disable-local.sh | 2 ++ t/t5813-proto-disable-ssh.sh | 2 ++ t/t6011-rev-list-with-bad-commit.sh | 1 + t/t6014-rev-list-all.sh | 1 + t/t6021-rev-list-exclude-hidden.sh | 1 + t/t6439-merge-co-error-msgs.sh | 1 + t/t7105-reset-patch.sh | 2 ++ t/t7106-reset-unborn-branch.sh | 2 ++ t/t7107-reset-pathspec-file.sh | 1 + t/t7301-clean-interactive.sh | 1 + t/t7403-submodule-sync.sh | 1 + t/t7409-submodule-detached-work-tree.sh | 1 + t/t7416-submodule-dash-url.sh | 2 ++ t/t7450-bad-git-dotfiles.sh | 2 ++ t/t7701-repack-unpack-unreachable.sh | 1 + 73 files changed, 158 insertions(+), 50 deletions(-) Range-diff against v3: 1: f5b67f44e2d = 1: 2ed69e3cda3 tests: mark tests as passing with SANITIZE=leak 2: 88c6b66be3c = 2: 9993786ba0d bundle.c: don't leak the "args" in the "struct child_process" 3: 8cc8060cd92 = 3: 8e98d7c4ebf commit-graph: use free_commit_graph() instead of UNLEAK() 4: 765d5cbcf81 = 4: 966d7657d54 clone: use free() instead of UNLEAK() 5: 5087fb73286 = 5: 93a8f8fa1b9 various: add missing clear_pathspec(), fix leaks 6: 39cb8aefb58 = 6: bd15d991ac7 name-rev: don't xstrdup() an already dup'd string 7: a3f1e800127 = 7: fd890121ebe repack: fix leaks on error with "goto cleanup" 8: f918a6f2adc ! 8: 1fe25bc6981 worktree: fix a trivial leak in prune_worktrees() @@ t/t2406-worktree-repair.sh . ./test-lib.sh test_expect_success setup ' + + ## t/t3203-branch-output.sh ## +@@ + #!/bin/sh + + test_description='git branch display tests' ++ ++TEST_PASSES_SANITIZE_LEAK=true + . ./test-lib.sh + . "$TEST_DIRECTORY"/lib-terminal.sh + 9: 56204806dfd = 9: 6b3dd9b15f0 http-backend.c: fix "dir" and "cmd_arg" leaks in cmd_main() 10: 5355e0fc60b = 10: 246f71bb447 http-backend.c: fix cmd_main() memory leak, refactor reg{exec,free}() 11: dfb52dbd1c4 = 11: ab31d8d10da commit-graph: fix a parse_options_concat() leak 12: e44e74dcc58 = 12: 9054b353220 show-branch: free() allocated "head" before return 13: 6d99fdcc44e ! 13: 05836b08e0f builtin/merge.c: always free "struct strbuf msg" @@ Metadata Author: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> ## Commit message ## - builtin/merge.c: always free "struct strbuf msg" + builtin/merge.c: use fixed strings, not "strbuf", fix leak Follow-up 465028e0e25 (merge: add missing strbuf_release(), 2021-10-07) and address the "msg" memory leak in this block. We could 14: a3bf3045597 = 14: e8ea18b08c2 builtin/merge.c: free "&buf" on "Your local changes..." error 15: 7c70bbdebc8 = 15: 66c24afb893 object-file.c: release the "tag" in check_tag() 16: 17537e1393e = 16: 52744d9690f grep.c: refactor free_grep_patterns() 17: e4bd46a343e = 17: 8ff63d9095c grep API: plug memory leaks by freeing "header_list" 18: 3e4b12cb623 ! 18: 0ad7d59b881 receive-pack: free() the "ref_name" in "struct command" @@ t/t5527-fetch-odd-refs.sh: test_description='test fetching of oddly-named refs' # afterwards we will have: + ## t/t5560-http-backend-noserver.sh ## +@@ t/t5560-http-backend-noserver.sh: test_description='test git-http-backend-noserver' + GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main + export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME + ++TEST_PASSES_SANITIZE_LEAK=true + . ./test-lib.sh + + HTTPD_DOCUMENT_ROOT_PATH="$TRASH_DIRECTORY" + + ## t/t5561-http-backend.sh ## +@@ t/t5561-http-backend.sh: test_description='test git-http-backend' + GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main + export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME + ++TEST_PASSES_SANITIZE_LEAK=true + . ./test-lib.sh + . "$TEST_DIRECTORY"/lib-httpd.sh + + + ## t/t5562-http-backend-content-length.sh ## +@@ + #!/bin/sh + + test_description='test git-http-backend respects CONTENT_LENGTH' ++ ++TEST_PASSES_SANITIZE_LEAK=true + . ./test-lib.sh + + test_lazy_prereq GZIP 'gzip --version' + ## t/t5705-session-id-in-capabilities.sh ## @@ 19: d51ed239a8a ! 19: b3aee41d0b4 push: free_refs() the "local_refs" in set_refspecs() @@ t/t1416-ref-transaction-hooks.sh: test_description='reference transaction hooks' test_expect_success setup ' + ## t/t2402-worktree-list.sh ## +@@ t/t2402-worktree-list.sh: test_description='test git worktree list' + GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main + export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME + ++TEST_PASSES_SANITIZE_LEAK=true + . ./test-lib.sh + + test_expect_success 'setup' ' + ## t/t5504-fetch-receive-strict.sh ## @@ t/t5504-fetch-receive-strict.sh: test_description='fetch/receive strict mode' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main -- 2.39.0.1225.g30a3d88132d