提交 0ed556d3 编写于 作者: E Elijah Newren 提交者: Junio C Hamano

rev-parse: check lookup'ed commit references for NULL

Commits 2122f8b9 ("rev-parse: Add support for the ^! and ^@ syntax",
2008-07-26) and 3dd4e732 ("Teach rev-parse the ... syntax.", 2006-07-04)
taught rev-parse new syntax, and used lookup_commit_reference() as part of
their logic.  Neither usage checked the returned commit to see if it was
non-NULL before using it.  Check for NULL and ensure an appropriate error
is reported to the user.

Reported by Florian Weimer and Todd Zullinger.
Helped-by: NJeff King <peff@peff.net>
Signed-off-by: NElijah Newren <newren@gmail.com>
Reviewed-by: NJeff King <peff@peff.net>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 d32eb83c
......@@ -282,6 +282,10 @@ static int try_difference(const char *arg)
struct commit *a, *b;
a = lookup_commit_reference(&oid);
b = lookup_commit_reference(&end);
if (!a || !b) {
*dotdot = '.';
return 0;
}
exclude = get_merge_bases(a, b);
while (exclude) {
struct commit *commit = pop_commit(&exclude);
......@@ -328,12 +332,12 @@ static int try_parent_shorthands(const char *arg)
return 0;
*dotdot = 0;
if (get_oid_committish(arg, &oid)) {
if (get_oid_committish(arg, &oid) ||
!(commit = lookup_commit_reference(&oid))) {
*dotdot = '^';
return 0;
}
commit = lookup_commit_reference(&oid);
if (exclude_parent &&
exclude_parent > commit_list_count(commit->parents)) {
*dotdot = '^';
......
......@@ -214,4 +214,12 @@ test_expect_success 'rev-list merge^-1x (garbage after ^-1)' '
test_must_fail git rev-list merge^-1x
'
test_expect_success 'rev-parse $garbage^@ does not segfault' '
test_must_fail git rev-parse $EMPTY_TREE^@
'
test_expect_success 'rev-parse $garbage...$garbage does not segfault' '
test_must_fail git rev-parse $EMPTY_TREE...$EMPTY_BLOB
'
test_done
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册