diff options
| author | Patrick Steinhardt <ps@pks.im> | 2024-11-05 07:17:12 +0100 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2024-11-04 22:37:54 -0800 |
| commit | 3f692fe5beb817fbb22754281dfb5ebf8863d0a3 (patch) | |
| tree | f58a066bb5a83e8020c4c1fdce4f1b02c0c52737 | |
| parent | builtin/commit: fix leaking change data contents (diff) | |
| download | git-3f692fe5beb817fbb22754281dfb5ebf8863d0a3.tar.gz git-3f692fe5beb817fbb22754281dfb5ebf8863d0a3.zip | |
trailer: fix leaking trailer values
Fix leaking trailer values when replacing the value with a command or
when the token value is empty.
This leak is exposed by t7513, but plugging it does not make the whole
test suite pass.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
| -rw-r--r-- | trailer.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -249,7 +249,9 @@ static char *apply_command(struct conf_info *conf, const char *arg) static void apply_item_command(struct trailer_item *in_tok, struct arg_item *arg_tok) { if (arg_tok->conf.command || arg_tok->conf.cmd) { - const char *arg; + char *value_to_free = NULL; + char *arg; + if (arg_tok->value && arg_tok->value[0]) { arg = arg_tok->value; } else { @@ -257,9 +259,13 @@ static void apply_item_command(struct trailer_item *in_tok, struct arg_item *arg arg = xstrdup(in_tok->value); else arg = xstrdup(""); + value_to_free = arg_tok->value; } + arg_tok->value = apply_command(&arg_tok->conf, arg); - free((char *)arg); + + free(value_to_free); + free(arg); } } |
