summaryrefslogtreecommitdiff
path: root/bisect.c
diff options
context:
space:
mode:
authorLibravatar Martin Ågren <martin.agren@gmail.com>2017-11-05 21:24:31 +0100
committerLibravatar Junio C Hamano <gitster@pobox.com>2017-11-06 10:15:29 +0900
commitf4e45cb3eb6fad4570ff63eecb37bae8102992fc (patch)
tree6c5bcac21f03ec8d0af24dbd4a2704dcacd51c87 /bisect.c
parentbisect: fix off-by-one error in `best_bisection_sorted()` (diff)
downloadtgif-f4e45cb3eb6fad4570ff63eecb37bae8102992fc.tar.xz
bisect: fix memory leak when returning best element
When `find_bisection()` returns a single list entry, it leaks the other entries. Move the to-be-returned item to the front and free the remainder. Signed-off-by: Martin Ågren <martin.agren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'bisect.c')
-rw-r--r--bisect.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/bisect.c b/bisect.c
index b1941505b2..3756f127b0 100644
--- a/bisect.c
+++ b/bisect.c
@@ -399,8 +399,12 @@ void find_bisection(struct commit_list **commit_list, int *reaches,
/* Do the real work of finding bisection commit. */
best = do_find_bisection(list, nr, weights, find_all);
if (best) {
- if (!find_all)
+ if (!find_all) {
+ list->item = best->item;
+ free_commit_list(list->next);
+ best = list;
best->next = NULL;
+ }
*reaches = weight(best);
}
free(weights);