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>
Jay Soffian committed
Feb 25, 2008 at 23:07 UTC
e103343644188ddddb3678f0568d150ca56f59e3
2 files changed
+44
-1
builtin-rev-parse.c
+1
-1
@@ -315,7 +315,7 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)
315
s = strchr(sb.buf, ' ');
316
if (!s || *sb.buf == ' ') {
317
o->type = OPTION_GROUP;
318
- o->help = xstrdup(skipspaces(s));
318
+ o->help = xstrdup(skipspaces(sb.buf));
319
continue;
320
}
321
t/t1502-rev-parse-parseopt.sh
new
+43
@@ -0,0 +1,43 @@
1
+#!/bin/sh
2
+
3
+test_description='test git rev-parse --parseopt'
4
+. ./test-lib.sh
5
+
6
+cat > expect.err <<EOF
7
+usage: some-command [options] <args>...
8
+
9
+ some-command does foo and bar!
10
+
11
+ -h, --help show the help
12
+ --foo some nifty option --foo
13
+ --bar ... some cool option --bar with an argument
14
+
15
+An option group Header
16
+ -C [...] option C with an optional argument
17
+
18
+Extras
19
+ --extra1 line above used to cause a segfault but no longer does
20
+
21
+EOF
22
+
23
+test_expect_success 'test --parseopt help output' '
24
+ git rev-parse --parseopt -- -h 2> output.err <<EOF
25
+some-command [options] <args>...
26
+
27
+some-command does foo and bar!
28
+--
29
+h,help show the help
30
+
31
+foo some nifty option --foo
32
+bar= some cool option --bar with an argument
33
+
34
+ An option group Header
35
+C? option C with an optional argument
36
+
37
+Extras
38
+extra1 line above used to cause a segfault but no longer does
39
+EOF
40
+ git diff expect.err output.err
41
+'
42
+
43
+test_done