[PATCH v3 2/4] mktree: plug per-tree leak in --batch mode
- From
Elijah Newren via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Aug 29, 2026, 07:00 UTC
- Message-ID
- <3f3b75690eea02960c7edc8d318ce7dff654f1bc.1787986831.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.2207.v3.git.1787986831.gitgitgadget@gmail.com>
From: Elijah Newren <newren@gmail.com>
In --batch mode "git mktree" reuses its entry buffer across trees, resetting `used` to 0 after writing each tree. It never frees the `treeent` structures the previous tree appended, though, so once the next tree overwrites those slots the earlier allocations are leaked. A single-tree invocation hides this, as the entries stay reachable through the `entries` global until exit.
Free each entry when resetting the buffer, and free the buffer itself before returning.
Signed-off-by: Elijah Newren <newren@gmail.com> --- builtin/mktree.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/builtin/mktree.c b/builtin/mktree.c index 4084e32476..dc2d293c3d 100644 --- a/builtin/mktree.c +++ b/builtin/mktree.c @@ -200,8 +200,11 @@ int cmd_mktree(int ac, puts(oid_to_hex(&oid)); fflush(stdout); } + for (int i = 0; i < used; i++) + free(entries[i]); used=0; /* reset tree entry buffer for re-use in batch mode */ } + free(entries); strbuf_release(&sb); return 0;
-- gitgitgadget