Skip to content

Commit

Permalink
fast-import: fix read of uninitialized argv memory
Browse files Browse the repository at this point in the history
Fast-import shares code between its command-line parser and
the "option" command. To do so, it strips the "--" from any
command-line options and passes them to the option parser.
However, it does not confirm that the option even begins
with "--" before blindly passing "arg + 2".

It does confirm that the option starts with "-", so the only
affected case was:

  git fast-import -

which would read uninitialized memory after the argument. We
can fix it by using skip_prefix and checking the result. As
a bonus, this gets rid of some magic numbers.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Jun 20, 2014
1 parent ce2ecf2 commit ff45c0d
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions fast-import.c
Original file line number Diff line number Diff line change
Expand Up @@ -3342,18 +3342,21 @@ static void parse_argv(void)
if (*a != '-' || !strcmp(a, "--"))
break;

if (parse_one_option(a + 2))
if (!skip_prefix(a, "--", &a))
die("unknown option %s", a);

if (parse_one_option(a))
continue;

if (parse_one_feature(a + 2, 0))
if (parse_one_feature(a, 0))
continue;

if (starts_with(a + 2, "cat-blob-fd=")) {
option_cat_blob_fd(a + 2 + strlen("cat-blob-fd="));
if (skip_prefix(a, "cat-blob-fd=", &a)) {
option_cat_blob_fd(a);
continue;
}

die("unknown option %s", a);
die("unknown option --%s", a);
}
if (i != global_argc)
usage(fast_import_usage);
Expand Down

0 comments on commit ff45c0d

Please sign in to comment.