[PATCH v4 00/19] leak fixes: various simple leak fixes
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Jan 17, 2023, 17:11 UTC
- Message-ID
- <cover-v4-00.19-00000000000-20230117T151201Z-avarab@gmail.com>
- In-Reply-To
- <cover-v3-00.19-00000000000-20230110T054138Z-avarab@gmail.com>
See https://lore.kernel.org/git/cover-v3-00.19-00000000000-20230110T054138Z-avarab@gmail.com/ 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@gmail.com>
## 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