[PATCH 06/16] fast-import: fix read of uninitialized argv memory
- From
Jeff King <peff@peff.net>
- Date
- Jun 18, 2014, 19:46 UTC
- Message-ID
- <20140618194615.GF22622@sigill.intra.peff.net>
- In-Reply-To
- <20140618194117.GA22269@sigill.intra.peff.net>
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> --- fast-import.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/fast-import.c b/fast-import.c index 6707a66..b2030cc 100644 --- a/fast-import.c +++ b/fast-import.c @@ -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);
-- 2.0.0.566.gfe3e6b2