Always check parse_tree*()'s return value
Otherwise we may easily run into serious crashes: For example, if we run `init_tree_desc()` directly after a failed `parse_tree()`, we are accessing uninitialized data or trying to dereference `NULL`. Note that the `parse_tree()` function already takes care of showing an error message. The `parse_tree_indirectly()` and `repo_get_commit_tree()` functions do not, therefore those latter call sites need to show a useful error message while the former do not. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
98c6d16d67
commit
aa9f618909
@ -447,12 +447,18 @@ static int real_merge(struct merge_tree_options *o,
|
||||
if (repo_get_oid_treeish(the_repository, merge_base, &base_oid))
|
||||
die(_("could not parse as tree '%s'"), merge_base);
|
||||
base_tree = parse_tree_indirect(&base_oid);
|
||||
if (!base_tree)
|
||||
die(_("unable to read tree (%s)"), oid_to_hex(&base_oid));
|
||||
if (repo_get_oid_treeish(the_repository, branch1, &head_oid))
|
||||
die(_("could not parse as tree '%s'"), branch1);
|
||||
parent1_tree = parse_tree_indirect(&head_oid);
|
||||
if (!parent1_tree)
|
||||
die(_("unable to read tree (%s)"), oid_to_hex(&head_oid));
|
||||
if (repo_get_oid_treeish(the_repository, branch2, &merge_oid))
|
||||
die(_("could not parse as tree '%s'"), branch2);
|
||||
parent2_tree = parse_tree_indirect(&merge_oid);
|
||||
if (!parent2_tree)
|
||||
die(_("unable to read tree (%s)"), oid_to_hex(&merge_oid));
|
||||
|
||||
opt.ancestor = merge_base;
|
||||
merge_incore_nonrecursive(&opt, base_tree, parent1_tree, parent2_tree, &result);
|
||||
|
||||
Reference in New Issue
Block a user