Skip to content

Commit

Permalink
checkout -p: handle tree arguments correctly again
Browse files Browse the repository at this point in the history
This fixes a segmentation fault.

The bug is caused by dereferencing `new_branch_info->commit` when it is
`NULL`, which is the case when the tree-ish argument is actually a tree,
not a commit-ish. This was introduced in 5602b50 (builtin/checkout:
fix `git checkout -p HEAD...` bug, 2020-10-07), where we tried to ensure
that the special tree-ish `HEAD...` is handled correctly.

Signed-off-by: Johannes Schindelin <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
dscho authored and gitster committed Dec 21, 2020
1 parent 35166b1 commit 5c29f19
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
6 changes: 4 additions & 2 deletions builtin/checkout.c
Original file line number Diff line number Diff line change
Expand Up @@ -479,9 +479,11 @@ static int checkout_paths(const struct checkout_opts *opts,
* with the hex of the commit (whether it's in `...` form or
* not) for the run_add_interactive() machinery to work
* properly. However, there is special logic for the HEAD case
* so we mustn't replace that.
* so we mustn't replace that. Also, when we were given a
* tree-object, new_branch_info->commit would be NULL, but we
* do not have to do any replacement, either.
*/
if (rev && strcmp(rev, "HEAD"))
if (rev && new_branch_info->commit && strcmp(rev, "HEAD"))
rev = oid_to_hex_r(rev_oid, &new_branch_info->commit->object.oid);

if (opts->checkout_index && opts->checkout_worktree)
Expand Down
5 changes: 5 additions & 0 deletions t/t2016-checkout-patch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -123,4 +123,9 @@ test_expect_success PERL 'none of this moved HEAD' '
verify_saved_head
'

test_expect_success PERL 'empty tree can be handled' '
test_when_finished "git reset --hard" &&
git checkout -p $(test_oid empty_tree) --
'

test_done

0 comments on commit 5c29f19

Please sign in to comment.