summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Ævar Arnfjörð Bjarmason <avarab@gmail.com>2018-01-03 18:48:52 +0000
committerLibravatar Junio C Hamano <gitster@pobox.com>2018-01-03 15:33:46 -0800
commit2e9fdc795cb27725e6dda7f4ba78ec0d9553b36a (patch)
treea34b8495690a56a27ea74e8bdb7d4cba6de14d80
parentbisect: fix memory leak when returning best element (diff)
downloadtgif-2e9fdc795cb27725e6dda7f4ba78ec0d9553b36a.tar.xz
bisect: fix a regression causing a segfault
In 7c117184d7 ("bisect: fix off-by-one error in `best_bisection_sorted()`", 2017-11-05) the more careful logic dealing with freeing p->next in 50e62a8e70 ("rev-list: implement --bisect-all", 2007-10-22) was removed. Restore the more careful check to avoid segfaulting. Ideally this would come with a test case, but we don't have steps to reproduce this, only a backtrace from gdb pointing to this being the issue. Reported-by: Yasushi SHOJI <yasushi.shoji@gmail.com> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Acked-by: Martin Ågren <martin.agren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--bisect.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/bisect.c b/bisect.c
index 3756f127b0..87e4dee16d 100644
--- a/bisect.c
+++ b/bisect.c
@@ -229,8 +229,10 @@ static struct commit_list *best_bisection_sorted(struct commit_list *list, int n
if (i < cnt - 1)
p = p->next;
}
- free_commit_list(p->next);
- p->next = NULL;
+ if (p) {
+ free_commit_list(p->next);
+ p->next = NULL;
+ }
strbuf_release(&buf);
free(array);
return list;