aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2024-11-05 07:17:12 +0100
committerJunio C Hamano <gitster@pobox.com>2024-11-04 22:37:54 -0800
commit3f692fe5beb817fbb22754281dfb5ebf8863d0a3 (patch)
treef58a066bb5a83e8020c4c1fdce4f1b02c0c52737
parentbuiltin/commit: fix leaking change data contents (diff)
downloadgit-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.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/trailer.c b/trailer.c
index 682d74505b..6bafe92b32 100644
--- a/trailer.c
+++ b/trailer.c
@@ -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);
}
}