Browse Source

multi-pack-index: fix potential segfault without sub-command

Since cd57bc41bb (builtin/multi-pack-index.c: display usage on
unrecognized command, 2021-03-30) we have used a "usage" label to avoid
having two separate callers of usage_with_options (one when no arguments
are given, and another for unrecognized sub-commands).

But the first caller has been broken since cd57bc41bb, since it will
happily jump to usage without arguments, and then pass argv[0] to the
"unrecognized subcommand" error.

Many compilers will save us from a segfault here, but the end result is
ugly, since it mentions an unrecognized subcommand when we didn't even
pass one, and (on GCC) includes "(null)" in its output.

Move the "usage" label down past the error about unrecognized
subcommands so that it is only triggered when it should be. While we're
at it, bulk up our test coverage in this area, too.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Taylor Blau 4 years ago committed by Junio C Hamano
parent
commit
88617d11f9
  1. 2
      builtin/multi-pack-index.c
  2. 5
      t/t5319-multi-pack-index.sh

2
builtin/multi-pack-index.c

@ -176,8 +176,8 @@ int cmd_multi_pack_index(int argc, const char **argv, @@ -176,8 +176,8 @@ int cmd_multi_pack_index(int argc, const char **argv,
else if (!strcmp(argv[0], "expire"))
return cmd_multi_pack_index_expire(argc, argv);
else {
usage:
error(_("unrecognized subcommand: %s"), argv[0]);
usage:
usage_with_options(builtin_multi_pack_index_usage,
builtin_multi_pack_index_options);
}

5
t/t5319-multi-pack-index.sh

@ -824,4 +824,9 @@ test_expect_success 'load reverse index when missing .idx, .pack' ' @@ -824,4 +824,9 @@ test_expect_success 'load reverse index when missing .idx, .pack' '
)
'

test_expect_success 'usage shown without sub-command' '
test_expect_code 129 git multi-pack-index 2>err &&
! test_i18ngrep "unrecognized subcommand" err
'

test_done

Loading…
Cancel
Save