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>
Patrick Steinhardt committed
Sep 5, 2024 at 12:08 UTC
cdbb7208c80661754b3f1a73aef086c08f88dcff
1 file changed
+4
-1
remote.c
+4
-1
@@ -1097,6 +1097,7 @@ void free_one_ref(struct ref *ref)
1097
return;
1098
free_one_ref(ref->peer_ref);
1099
free(ref->remote_status);
1100
+ free(ref->tracking_ref);
1101
free(ref->symref);
1102
free(ref);
1103
}
@@ -2577,8 +2578,10 @@ static int remote_tracking(struct remote *remote, const char *refname,
2578
dst = apply_refspecs(&remote->fetch, refname);
2579
if (!dst)
2580
return -1; /* no tracking ref for refname at remote */
2580
- if (refs_read_ref(get_main_ref_store(the_repository), dst, oid))
2581
+ if (refs_read_ref(get_main_ref_store(the_repository), dst, oid)) {
2582
+ free(dst);
2583
return -1; /* we know what the tracking ref is but we cannot read it */
2584
+ }
2585
2586
*dst_refname = dst;
2587
return 0;