diff options
author | Michael Haggerty <mhagger@alum.mit.edu> | 2013-10-30 06:32:57 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-10-30 14:16:34 -0700 |
commit | e31a17f7416a85ee8c3260f8c8b7519ff7ea82b6 (patch) | |
tree | a0a9488c91f0d4c1c691cbefa920d9b323650d7d /remote.c | |
parent | f166db26af524278b42caac8f092d8de5e3e9c29 (diff) | |
download | git-e31a17f7416a85ee8c3260f8c8b7519ff7ea82b6.tar.gz |
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>
Diffstat (limited to 'remote.c')
-rw-r--r-- | remote.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -1567,9 +1567,9 @@ static struct ref *get_expanded_map(const struct ref *remote_refs, struct ref *ret = NULL; struct ref **tail = &ret; - char *expn_name; - for (ref = remote_refs; ref; ref = ref->next) { + char *expn_name = NULL; + if (strchr(ref->name, '^')) continue; /* a dereference item */ if (match_name_with_pattern(refspec->src, ref->name, @@ -1578,12 +1578,12 @@ static struct ref *get_expanded_map(const struct ref *remote_refs, struct ref *cpy = copy_ref(ref); cpy->peer_ref = alloc_ref(expn_name); - free(expn_name); if (refspec->force) cpy->peer_ref->force = 1; *tail = cpy; tail = &cpy->next; } + free(expn_name); } return ret; |