summaryrefslogtreecommitdiff
path: root/ref-filter.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2019-07-19 18:30:23 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-07-19 18:30:23 (GMT)
commit8619522ad1670ea82c0895f2bfe6c75e06df32e7 (patch)
treed7cdea6b6a16b4e693296a69cf33032a6f5bae41 /ref-filter.c
parentfff813c6aee48348578f32c8ea5a48781f182b65 (diff)
parent14d30cdfc047fdff33c359f17cbb070f2faed009 (diff)
downloadgit-8619522ad1670ea82c0895f2bfe6c75e06df32e7.zip
git-8619522ad1670ea82c0895f2bfe6c75e06df32e7.tar.gz
git-8619522ad1670ea82c0895f2bfe6c75e06df32e7.tar.bz2
Merge branch 'ma/ref-filter-leakfix'
Leakfix. * ma/ref-filter-leakfix: ref-filter: fix memory leak in `free_array_item()`
Diffstat (limited to 'ref-filter.c')
-rw-r--r--ref-filter.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/ref-filter.c b/ref-filter.c
index 56528ca..f27cfc8 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -2142,7 +2142,9 @@ static void free_array_item(struct ref_array_item *item)
{
free((char *)item->symref);
if (item->value) {
- free((char *)item->value->s);
+ int i;
+ for (i = 0; i < used_atom_cnt; i++)
+ free((char *)item->value[i].s);
free(item->value);
}
free(item);
@@ -2153,14 +2155,16 @@ void ref_array_clear(struct ref_array *array)
{
int i;
- for (i = 0; i < used_atom_cnt; i++)
- free((char *)used_atom[i].name);
- FREE_AND_NULL(used_atom);
- used_atom_cnt = 0;
for (i = 0; i < array->nr; i++)
free_array_item(array->items[i]);
FREE_AND_NULL(array->items);
array->nr = array->alloc = 0;
+
+ for (i = 0; i < used_atom_cnt; i++)
+ free((char *)used_atom[i].name);
+ FREE_AND_NULL(used_atom);
+ used_atom_cnt = 0;
+
if (ref_to_worktree_map.worktrees) {
hashmap_free(&(ref_to_worktree_map.map), 1);
free_worktrees(ref_to_worktree_map.worktrees);