mirror of
https://github.com/git/git
synced 2024-08-24 18:26:02 +00:00
checkout -p: handle tree arguments correctly again
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 5602b500c3
(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 <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
35166b1fb5
commit
5c29f19cda
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue