Skip to content
This repository was archived by the owner on Nov 9, 2017. It is now read-only.

Commit a43219f

Browse files
David Sharpgitster
authored andcommitted
rev-parse: check i before using argv[i] against argc
The --prefix, --default, and --resolve-git-dir options to git-rev-parse require an argument, but when given no argument, the code uses the NULL read from argv[argc] without checking, leading to a segfault. Instead, check first and die() with an error message. Signed-off-by: David Sharp <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent d2446df commit a43219f

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

builtin/rev-parse.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -523,15 +523,17 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
523523
continue;
524524
}
525525
if (!strcmp(arg, "--default")) {
526-
def = argv[i+1];
527-
i++;
526+
def = argv[++i];
527+
if (!def)
528+
die("--default requires an argument");
528529
continue;
529530
}
530531
if (!strcmp(arg, "--prefix")) {
531-
prefix = argv[i+1];
532+
prefix = argv[++i];
533+
if (!prefix)
534+
die("--prefix requires an argument");
532535
startup_info->prefix = prefix;
533536
output_prefix = 1;
534-
i++;
535537
continue;
536538
}
537539
if (!strcmp(arg, "--revs-only")) {
@@ -703,9 +705,12 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
703705
continue;
704706
}
705707
if (!strcmp(arg, "--resolve-git-dir")) {
706-
const char *gitdir = resolve_gitdir(argv[i+1]);
708+
const char *gitdir = argv[++i];
707709
if (!gitdir)
708-
die("not a gitdir '%s'", argv[i+1]);
710+
die("--resolve-git-dir requires an argument");
711+
gitdir = resolve_gitdir(gitdir);
712+
if (!gitdir)
713+
die("not a gitdir '%s'", argv[i]);
709714
puts(gitdir);
710715
continue;
711716
}

0 commit comments

Comments
 (0)