Browse Source

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
Jay Soffian 17 years ago committed by Junio C Hamano
parent
commit
e103343644
  1. 2
      builtin-rev-parse.c
  2. 43
      t/t1502-rev-parse-parseopt.sh

2
builtin-rev-parse.c

@ -315,7 +315,7 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix) @@ -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;
}


43
t/t1502-rev-parse-parseopt.sh

@ -0,0 +1,43 @@ @@ -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…
Cancel
Save