]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/commit: fix leaking change data contents
authorPatrick Steinhardt <ps@pks.im>
Tue, 5 Nov 2024 06:17:09 +0000 (07:17 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 5 Nov 2024 06:37:53 +0000 (22:37 -0800)
While we free the worktree change data, we never free its contents. Fix
this.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/commit.c
t/t7500-commit-template-squash-signoff.sh

index 8db4e9df0c9944ff4d8712ffcf23d5c800e9d334..18a55bd1b9189ab48e95fab159a5bbc80d816e03 100644 (file)
@@ -728,6 +728,13 @@ static void prepare_amend_commit(struct commit *commit, struct strbuf *sb,
        repo_unuse_commit_buffer(the_repository, commit, buffer);
 }
 
+static void change_data_free(void *util, const char *str UNUSED)
+{
+       struct wt_status_change_data *d = util;
+       free(d->rename_source);
+       free(d);
+}
+
 static int prepare_to_commit(const char *index_file, const char *prefix,
                             struct commit *current_head,
                             struct wt_status *s,
@@ -991,7 +998,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
                s->use_color = 0;
                committable = run_status(s->fp, index_file, prefix, 1, s);
                s->use_color = saved_color_setting;
-               string_list_clear(&s->change, 1);
+               string_list_clear_func(&s->change, change_data_free);
        } else {
                struct object_id oid;
                const char *parent = "HEAD";
index 4dca8d97a772d63566a9ea19121d8019cafb766c..379d3ed3413d82374ce098ce7549a4c0adca059d 100755 (executable)
@@ -7,6 +7,7 @@ test_description='git commit
 
 Tests for template, signoff, squash and -F functions.'
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 . "$TEST_DIRECTORY"/lib-rebase.sh