Merge branch 'en/rev-parse-invalid-range'
authorJunio C Hamano <gitster@pobox.com>
Fri, 1 Jun 2018 06:06:39 +0000 (15:06 +0900)
committerJunio C Hamano <gitster@pobox.com>
Fri, 1 Jun 2018 06:06:39 +0000 (15:06 +0900)
"git rev-parse Y..." etc. misbehaved when given endpoints were
not committishes.

* en/rev-parse-invalid-range:
rev-parse: check lookup'ed commit references for NULL

builtin/rev-parse.c
t/t6101-rev-parse-parents.sh
index 55c0b904410dd4bc12420ff0cb95042d697940fe..4f49e96bfd0166aeb6f9875a688ff0dd83d631b5 100644 (file)
@@ -282,6 +282,10 @@ static int try_difference(const char *arg)
                        struct commit *a, *b;
                        a = lookup_commit_reference(&start_oid);
                        b = lookup_commit_reference(&end_oid);
+                       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 = '^';
index 8c617981a3a06c1ff49f03a2914bfdc31c0e293c..7683e4a1142a6ee31a1f1fd51b774b19fc2c7401 100755 (executable)
@@ -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