summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2014-06-04 03:11:11 -0400
committerJunio C Hamano <gitster@pobox.com>2014-06-04 11:02:55 -0700
commitc8e1ee4f2c8e28b7eef824248f09ba37599593d7 (patch)
tree664131d572172bff66933e0bea31c4f0c20f0c6c
parentb6c2a0d45d4165dfd326bd7a28e66d9cedb8ae84 (diff)
downloadgit-jc/rev-parse-argh-dashed-multi-words.tar.gz
update-index: fix segfault with missing --cacheinfo argumentjc/rev-parse-argh-dashed-multi-words
Running "git update-index --cacheinfo" without any further arguments results in a segfault rather than an error message. Commit ec160ae (update-index: teach --cacheinfo a new syntax "mode,sha1,path", 2014-03-23) added code to examine the format of the argument, but forgot to handle the NULL case. Returning an error from the parser is enough, since we then treat it as an old-style "--cacheinfo <mode> <sha1> <path>", and complain that we have less than 3 arguments to read. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/update-index.c3
-rwxr-xr-xt/t2107-update-index-basic.sh4
2 files changed, 7 insertions, 0 deletions
diff --git a/builtin/update-index.c b/builtin/update-index.c
index ba54e19cd5..ebea285e1b 100644
--- a/builtin/update-index.c
+++ b/builtin/update-index.c
@@ -637,6 +637,9 @@ static int parse_new_style_cacheinfo(const char *arg,
unsigned long ul;
char *endp;
+ if (!arg)
+ return -1;
+
errno = 0;
ul = strtoul(arg, &endp, 8);
if (errno || endp == arg || *endp != ',' || (unsigned int) ul != ul)
diff --git a/t/t2107-update-index-basic.sh b/t/t2107-update-index-basic.sh
index fe2fb17102..1bafb9098c 100755
--- a/t/t2107-update-index-basic.sh
+++ b/t/t2107-update-index-basic.sh
@@ -29,6 +29,10 @@ test_expect_success 'update-index -h with corrupt index' '
test_i18ngrep "[Uu]sage: git update-index" broken/usage
'
+test_expect_success '--cacheinfo complains of missing arguments' '
+ test_must_fail git update-index --cacheinfo
+'
+
test_expect_success '--cacheinfo does not accept blob null sha1' '
echo content >file &&
git add file &&