summaryrefslogtreecommitdiff
path: root/bisect.c
diff options
context:
space:
mode:
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>2018-01-03 18:48:52 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-01-03 23:33:46 (GMT)
commit2e9fdc795cb27725e6dda7f4ba78ec0d9553b36a (patch)
treea34b8495690a56a27ea74e8bdb7d4cba6de14d80 /bisect.c
parentf4e45cb3eb6fad4570ff63eecb37bae8102992fc (diff)
downloadgit-2e9fdc795cb27725e6dda7f4ba78ec0d9553b36a.zip
git-2e9fdc795cb27725e6dda7f4ba78ec0d9553b36a.tar.gz
git-2e9fdc795cb27725e6dda7f4ba78ec0d9553b36a.tar.bz2
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>
Diffstat (limited to 'bisect.c')
-rw-r--r--bisect.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/bisect.c b/bisect.c
index 3756f12..87e4dee 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;