Skip to content

Commit e31a17f

Browse files
mhaggergitster
authored andcommitted
get_expanded_map(): avoid memory leak
The old code could leak *expn_name if match_name_with_pattern() succeeded but ignore_symref_update() returned true. So make sure that *expn_name is freed in any case. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent f166db2 commit e31a17f

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

remote.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1567,9 +1567,9 @@ static struct ref *get_expanded_map(const struct ref *remote_refs,
15671567
struct ref *ret = NULL;
15681568
struct ref **tail = &ret;
15691569

1570-
char *expn_name;
1571-
15721570
for (ref = remote_refs; ref; ref = ref->next) {
1571+
char *expn_name = NULL;
1572+
15731573
if (strchr(ref->name, '^'))
15741574
continue; /* a dereference item */
15751575
if (match_name_with_pattern(refspec->src, ref->name,
@@ -1578,12 +1578,12 @@ static struct ref *get_expanded_map(const struct ref *remote_refs,
15781578
struct ref *cpy = copy_ref(ref);
15791579

15801580
cpy->peer_ref = alloc_ref(expn_name);
1581-
free(expn_name);
15821581
if (refspec->force)
15831582
cpy->peer_ref->force = 1;
15841583
*tail = cpy;
15851584
tail = &cpy->next;
15861585
}
1586+
free(expn_name);
15871587
}
15881588

15891589
return ret;

0 commit comments

Comments
 (0)