about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2016-08-31 10:03:50 -0700
committerJunio C Hamano <gitster@pobox.com>2016-08-31 10:03:50 -0700
commit4762bf36d9d4190dd7afdbc9ccc8bd8bc5af40f8 (patch)
tree99d9b401dbb6f5e27982ed9356a2820b84830bc3
parent9010077be2de8be28bfa6eebd6de723236324477 (diff)
parentbc6b13a7d2300e982dd3a3aeef2f3ad4d39cf149 (diff)
downloadgit-svn-4762bf36d9d4190dd7afdbc9ccc8bd8bc5af40f8.tar.gz
* mh/blame-worktree:
  blame: fix segfault on untracked files
-rw-r--r--builtin/blame.c3
-rwxr-xr-xt/t8002-blame.sh5
2 files changed, 7 insertions, 1 deletions
diff --git a/builtin/blame.c b/builtin/blame.c
index 7ec7823430..a5bbf91e49 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -2244,7 +2244,8 @@ static void verify_working_tree_path(struct commit *work_tree, const char *path)
         pos = cache_name_pos(path, strlen(path));
         if (pos >= 0)
                 ; /* path is in the index */
-        else if (!strcmp(active_cache[-1 - pos]->name, path))
+        else if (-1 - pos < active_nr &&
+                 !strcmp(active_cache[-1 - pos]->name, path))
                 ; /* path is in the index, unmerged */
         else
                 die("no such path '%s' in HEAD", path);
diff --git a/t/t8002-blame.sh b/t/t8002-blame.sh
index ff09aced68..ab79de9544 100755
--- a/t/t8002-blame.sh
+++ b/t/t8002-blame.sh
@@ -6,6 +6,11 @@ test_description='git blame'
 PROG='git blame -c'
 . "$TEST_DIRECTORY"/annotate-tests.sh
 
+test_expect_success 'blame untracked file in empty repo' '
+        >untracked &&
+        test_must_fail git blame untracked
+'
+
 PROG='git blame -c -e'
 test_expect_success 'blame --show-email' '
         check_count \