diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-07-25 21:51:58 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-07-25 21:51:58 -0700 |
commit | a07b10c8f930e88386d3b7424f25190af554275e (patch) | |
tree | cbacdd069189db730084b08cc05c8a041ce64934 | |
parent | 8024d5961bf885245d8febcb189a8c71bb46b29f (diff) | |
parent | 1b0b962d771fb734cbf273f216b487bb58dec7b9 (diff) | |
download | git-a07b10c8f930e88386d3b7424f25190af554275e.tar.gz git-a07b10c8f930e88386d3b7424f25190af554275e.tar.xz |
Merge branch 'maint-1.6.4' into maint-1.6.5
* maint-1.6.4:
Check size of path buffer before writing into it
rev-parse: fix --parse-opt --keep-dashdash --stop-at-non-option
-rw-r--r-- | builtin-rev-parse.c | 4 | ||||
-rw-r--r-- | setup.c | 2 | ||||
-rwxr-xr-x | t/t1502-rev-parse-parseopt.sh | 18 |
3 files changed, 22 insertions, 2 deletions
diff --git a/builtin-rev-parse.c b/builtin-rev-parse.c index 45bead654..b58531209 100644 --- a/builtin-rev-parse.c +++ b/builtin-rev-parse.c @@ -397,8 +397,8 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix) ALLOC_GROW(opts, onb + 1, osz); memset(opts + onb, 0, sizeof(opts[onb])); argc = parse_options(argc, argv, prefix, opts, usage, - keep_dashdash ? PARSE_OPT_KEEP_DASHDASH : 0 | - stop_at_non_option ? PARSE_OPT_STOP_AT_NON_OPTION : 0); + (keep_dashdash ? PARSE_OPT_KEEP_DASHDASH : 0) | + (stop_at_non_option ? PARSE_OPT_STOP_AT_NON_OPTION : 0)); strbuf_addf(&parsed, " --"); sq_quote_argv(&parsed, argv, 0); @@ -156,6 +156,8 @@ static int is_git_directory(const char *suspect) char path[PATH_MAX]; size_t len = strlen(suspect); + if (PATH_MAX <= len + strlen("/objects")) + die("Too long path: %.*s", 60, suspect); strcpy(path, suspect); if (getenv(DB_ENVIRONMENT)) { if (access(getenv(DB_ENVIRONMENT), X_OK)) diff --git a/t/t1502-rev-parse-parseopt.sh b/t/t1502-rev-parse-parseopt.sh index e50405806..3b612c67b 100755 --- a/t/t1502-rev-parse-parseopt.sh +++ b/t/t1502-rev-parse-parseopt.sh @@ -79,4 +79,22 @@ test_expect_success 'test --parseopt --keep-dashdash' ' test_cmp expect output ' +cat >expect <<EOF +set -- --foo -- '--' 'arg' '--spam=ham' +EOF + +test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option with --' ' + git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo -- arg --spam=ham <optionspec >output && + test_cmp expect output +' + +cat > expect <<EOF +set -- --foo -- 'arg' '--spam=ham' +EOF + +test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option without --' ' + git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo arg --spam=ham <optionspec >output && + test_cmp expect output +' + test_done |