use parse_commit_or_die instead of segfaulting
Some unchecked calls to parse_commit should obviously die on error, because their next step is to start looking at the parsed fields, which will cause a segfault. These are obvious candidates for parse_commit_or_die, which will be a strict improvement in behavior. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
5e7d4d3e93
commit
683ff884cc
@ -796,7 +796,7 @@ static int switch_branches(const struct checkout_opts *opts,
|
|||||||
new->commit = old.commit;
|
new->commit = old.commit;
|
||||||
if (!new->commit)
|
if (!new->commit)
|
||||||
die(_("You are on a branch yet to be born"));
|
die(_("You are on a branch yet to be born"));
|
||||||
parse_commit(new->commit);
|
parse_commit_or_die(new->commit);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = merge_working_tree(opts, &old, new, &writeout_error);
|
ret = merge_working_tree(opts, &old, new, &writeout_error);
|
||||||
@ -959,7 +959,7 @@ static int parse_branchname_arg(int argc, const char **argv,
|
|||||||
/* not a commit */
|
/* not a commit */
|
||||||
*source_tree = parse_tree_indirect(rev);
|
*source_tree = parse_tree_indirect(rev);
|
||||||
} else {
|
} else {
|
||||||
parse_commit(new->commit);
|
parse_commit_or_die(new->commit);
|
||||||
*source_tree = new->commit->tree;
|
*source_tree = new->commit->tree;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -286,7 +286,7 @@ static void handle_commit(struct commit *commit, struct rev_info *rev)
|
|||||||
|
|
||||||
rev->diffopt.output_format = DIFF_FORMAT_CALLBACK;
|
rev->diffopt.output_format = DIFF_FORMAT_CALLBACK;
|
||||||
|
|
||||||
parse_commit(commit);
|
parse_commit_or_die(commit);
|
||||||
author = strstr(commit->buffer, "\nauthor ");
|
author = strstr(commit->buffer, "\nauthor ");
|
||||||
if (!author)
|
if (!author)
|
||||||
die ("Could not find author in commit %s",
|
die ("Could not find author in commit %s",
|
||||||
@ -307,7 +307,7 @@ static void handle_commit(struct commit *commit, struct rev_info *rev)
|
|||||||
if (commit->parents &&
|
if (commit->parents &&
|
||||||
get_object_mark(&commit->parents->item->object) != 0 &&
|
get_object_mark(&commit->parents->item->object) != 0 &&
|
||||||
!full_tree) {
|
!full_tree) {
|
||||||
parse_commit(commit->parents->item);
|
parse_commit_or_die(commit->parents->item);
|
||||||
diff_tree_sha1(commit->parents->item->tree->object.sha1,
|
diff_tree_sha1(commit->parents->item->tree->object.sha1,
|
||||||
commit->tree->object.sha1, "", &rev->diffopt);
|
commit->tree->object.sha1, "", &rev->diffopt);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user