Skip to content

Commit cdbb720

Browse files
pks-tgitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 1e8cb17 commit cdbb720

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

remote.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1097,6 +1097,7 @@ void free_one_ref(struct ref *ref)
10971097
return;
10981098
free_one_ref(ref->peer_ref);
10991099
free(ref->remote_status);
1100+
free(ref->tracking_ref);
11001101
free(ref->symref);
11011102
free(ref);
11021103
}
@@ -2577,8 +2578,10 @@ static int remote_tracking(struct remote *remote, const char *refname,
25772578
dst = apply_refspecs(&remote->fetch, refname);
25782579
if (!dst)
25792580
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);
25812583
return -1; /* we know what the tracking ref is but we cannot read it */
2584+
}
25822585

25832586
*dst_refname = dst;
25842587
return 0;

0 commit comments

Comments
 (0)