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>maint
parent
1468bd4783
commit
e103343644
|
@ -315,7 +315,7 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)
|
||||||
s = strchr(sb.buf, ' ');
|
s = strchr(sb.buf, ' ');
|
||||||
if (!s || *sb.buf == ' ') {
|
if (!s || *sb.buf == ' ') {
|
||||||
o->type = OPTION_GROUP;
|
o->type = OPTION_GROUP;
|
||||||
o->help = xstrdup(skipspaces(s));
|
o->help = xstrdup(skipspaces(sb.buf));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue