summaryrefslogtreecommitdiff
path: root/remote.c
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2024-09-05 12:08:59 +0200
committerJunio C Hamano <gitster@pobox.com>2024-09-05 08:49:11 -0700
commitcdbb7208c80661754b3f1a73aef086c08f88dcff (patch)
tree941ad6539e02a975500e7cc3cabb1fc142d9e32f /remote.c
parent1e8cb17ac5c0e7871e15dd40bacd617f25a54763 (diff)
remote: fix leaking tracking refs
When computing the remote tracking ref we cause two memory leaks: - We leak when `remote_tracking()` fails. - We leak when the call to `remote_tracking()` succeeds and sets `ref->tracking_ref()`. Fix both of these leaks. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'remote.c')
-rw-r--r--remote.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/remote.c b/remote.c
index 7d5b8f750d..8d666c1641 100644
--- a/remote.c
+++ b/remote.c
@@ -1097,6 +1097,7 @@ void free_one_ref(struct ref *ref)
return;
free_one_ref(ref->peer_ref);
free(ref->remote_status);
+ free(ref->tracking_ref);
free(ref->symref);
free(ref);
}
@@ -2577,8 +2578,10 @@ static int remote_tracking(struct remote *remote, const char *refname,
dst = apply_refspecs(&remote->fetch, refname);
if (!dst)
return -1; /* no tracking ref for refname at remote */
- if (refs_read_ref(get_main_ref_store(the_repository), dst, oid))
+ if (refs_read_ref(get_main_ref_store(the_repository), dst, oid)) {
+ free(dst);
return -1; /* we know what the tracking ref is but we cannot read it */
+ }
*dst_refname = dst;
return 0;