diff options
author | Ævar Arnfjörð Bjarmason <avarab@gmail.com> | 2018-01-03 18:48:52 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-01-03 15:33:46 -0800 |
commit | 2e9fdc795cb27725e6dda7f4ba78ec0d9553b36a (patch) | |
tree | a34b8495690a56a27ea74e8bdb7d4cba6de14d80 | |
parent | bisect: fix memory leak when returning best element (diff) | |
download | tgif-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.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -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; |