diff options
author | Jay Soffian <jaysoffian@gmail.com> | 2008-02-25 23:07:39 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-02-25 21:40:12 -0800 |
commit | e103343644188ddddb3678f0568d150ca56f59e3 (patch) | |
tree | 90bd52d7f2b9cf74eb62b80da5acb0065fae4cd6 | |
parent | 1468bd47833c6ec3c85620d6af1d910e9378f714 (diff) | |
download | git-e103343644188ddddb3678f0568d150ca56f59e3.tar.gz git-e103343644188ddddb3678f0568d150ca56f59e3.tar.xz |
rev-parse: fix potential bus error with --parseopt option spec handling
A non-empty line containing no spaces should be treated by --parseopt as
an option group header, but was causing a bus error. Also added a test
script for rev-parse --parseopt.
Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin-rev-parse.c | 2 | ||||
-rwxr-xr-x | t/t1502-rev-parse-parseopt.sh | 43 |
2 files changed, 44 insertions, 1 deletions
diff --git a/builtin-rev-parse.c b/builtin-rev-parse.c index b9af1a5a5..90dbb9d7c 100644 --- a/builtin-rev-parse.c +++ b/builtin-rev-parse.c @@ -315,7 +315,7 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix) s = strchr(sb.buf, ' '); if (!s || *sb.buf == ' ') { o->type = OPTION_GROUP; - o->help = xstrdup(skipspaces(s)); + o->help = xstrdup(skipspaces(sb.buf)); continue; } diff --git a/t/t1502-rev-parse-parseopt.sh b/t/t1502-rev-parse-parseopt.sh new file mode 100755 index 000000000..762af5faf --- /dev/null +++ b/t/t1502-rev-parse-parseopt.sh @@ -0,0 +1,43 @@ +#!/bin/sh + +test_description='test git rev-parse --parseopt' +. ./test-lib.sh + +cat > expect.err <<EOF +usage: some-command [options] <args>... + + some-command does foo and bar! + + -h, --help show the help + --foo some nifty option --foo + --bar ... some cool option --bar with an argument + +An option group Header + -C [...] option C with an optional argument + +Extras + --extra1 line above used to cause a segfault but no longer does + +EOF + +test_expect_success 'test --parseopt help output' ' + git rev-parse --parseopt -- -h 2> output.err <<EOF +some-command [options] <args>... + +some-command does foo and bar! +-- +h,help show the help + +foo some nifty option --foo +bar= some cool option --bar with an argument + + An option group Header +C? option C with an optional argument + +Extras +extra1 line above used to cause a segfault but no longer does +EOF + git diff expect.err output.err +' + +test_done |