load_branch_decorations: fix memory leak with non-static filters

load_branch_decorations calls normalize_glob_ref on each string of filter's string_lists. This effectively replaces the potentially non-owning char* of those items with an owning char*. Set the strdup_string flag on those string_lists. This was not caught until now because: - when passing string_lists already with the strdup_string already set, the behaviour was correct - when passing static string_lists, the new char* remain reachable until program exit Signed-off-by: Nicolas Guichard <nicolas@guichard.eu> Acked-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Nicolas Guichard committed Oct 9, 2024 at 07:58 UTC e4d03b79386e3bd0dba1c8096f8602490bda99d6
1 file changed +5
log-tree.c
+5
@@ -232,6 +232,11 @@ void load_ref_decorations(struct decoration_filter *filter, int flags)
232 for_each_string_list_item(item, filter->exclude_ref_config_pattern) {
233 normalize_glob_ref(item, NULL, item->string);
234 }
235 +
236 + /* normalize_glob_ref duplicates the strings */
237 + filter->exclude_ref_pattern->strdup_strings = 1;
238 + filter->include_ref_pattern->strdup_strings = 1;
239 + filter->exclude_ref_config_pattern->strdup_strings = 1;
240 }
241 decoration_loaded = 1;
242 decoration_flags = flags;