builtin/blame: fix leaking ignore revs files

When parsing the blame configuration we add "blame.ignoreRevsFile"
configs to a string list. This string list is declared as with `NODUP`,
and thus we hand over the allocated string to that list. We eventually
end up calling `string_list_clear()` on that list, but due to it being
declared as `NODUP` we will not release the associated strings and thus
leak memory.

Fix this issue by setting up the list as `DUP` instead and free the
config string after insertion.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Patrick Steinhardt 2024-06-11 11:21:29 +02:00 committed by Junio C Hamano
parent 3332f35577
commit fbf7a46d88
2 changed files with 4 additions and 1 deletions

View File

@ -67,7 +67,7 @@ static int no_whole_file_rename;
static int show_progress;
static char repeated_meta_color[COLOR_MAXLEN];
static int coloring_mode;
static struct string_list ignore_revs_file_list = STRING_LIST_INIT_NODUP;
static struct string_list ignore_revs_file_list = STRING_LIST_INIT_DUP;
static int mark_unblamable_lines;
static int mark_ignored_lines;

@ -725,6 +725,7 @@ static int git_blame_config(const char *var, const char *value,
if (ret)
return ret;
string_list_insert(&ignore_revs_file_list, str);
free(str);
return 0;
}
if (!strcmp(var, "blame.markunblamablelines")) {

View File

@ -1,6 +1,8 @@
#!/bin/sh

test_description='ignore revisions when blaming'

TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh

# Creates: