]> git.ipfire.org Git - thirdparty/git.git/commitdiff
refs: fix memory leak when parsing hideRefs config
authorPatrick Steinhardt <ps@pks.im>
Thu, 17 Nov 2022 05:46:39 +0000 (06:46 +0100)
committerTaylor Blau <me@ttaylorr.com>
Thu, 17 Nov 2022 21:22:51 +0000 (16:22 -0500)
When parsing the hideRefs configuration, we first duplicate the config
value so that we can modify it. We then subsequently append it to the
`hide_refs` string list, which is initialized with `strdup_strings`
enabled. As a consequence we again reallocate the string, but never
free the first duplicate and thus have a memory leak.

While we never clean up the static `hide_refs` variable anyway, this is
no excuse to make the leak worse by leaking every value twice. We are
also about to change the way this variable will be handled so that we do
indeed start to clean it up. So let's fix the memory leak by using the
`string_list_append_nodup()` so that we pass ownership of the allocated
string to `hide_refs`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
refs.c

diff --git a/refs.c b/refs.c
index 1491ae937eb8c4d5be5dbe9678911fe39be390cd..a4ab264d74261c8e73915126b777591b086c159f 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -1435,7 +1435,7 @@ int parse_hide_refs_config(const char *var, const char *value, const char *secti
                        CALLOC_ARRAY(hide_refs, 1);
                        hide_refs->strdup_strings = 1;
                }
-               string_list_append(hide_refs, ref);
+               string_list_append_nodup(hide_refs, ref);
        }
        return 0;
 }