line-log: fix crash when --first-parent is used

line-log tries to access all parents of a commit, but only the first parent has been loaded if "--first-parent" is specified, resulting in a crash. Limit the number of parents to one if "--first-parent" is specified. Reported-by: Eric N. Vander Weele <ericvw@gmail.com> Signed-off-by: Tzvetan Mikov <tmikov@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Tzvetan Mikov committed Nov 4, 2014 at 12:33 UTC a8787c5c1c51f4bdb610526175442a23eea7c467
2 files changed +8
line-log.c
+3
@@ -1164,6 +1164,9 @@ static int process_ranges_merge_commit(struct rev_info *rev, struct commit *comm
1164 int i;
1165 int nparents = count_parents(commit);
1166
1167 + if (nparents > 1 && rev->first_parent_only)
1168 + nparents = 1;
1169 +
1170 diffqueues = xmalloc(nparents * sizeof(*diffqueues));
1171 cand = xmalloc(nparents * sizeof(*cand));
1172 parents = xmalloc(nparents * sizeof(*parents));
t/t4211-line-log.sh
+5
@@ -77,4 +77,9 @@ test_expect_success '-L {empty-range} (first -L)' '
77 git log -L$n:b.c
78 '
79
80 +test_expect_success '-L with --first-parent and a merge' '
81 + git checkout parallel-change &&
82 + git log --first-parent -L 1,1:b.c
83 +'
84 +
85 test_done