mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-07-26 12:45:20 +03:00
73 lines
2.7 KiB
Diff
73 lines
2.7 KiB
Diff
Patch-Source: https://github.com/git/git/commit/891cb09db6c0e6bf11b8175bc5ea5f45493afb85
|
|
From 891cb09db6c0e6bf11b8175bc5ea5f45493afb85 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?=C3=86var=20Arnfj=C3=B6r=C3=B0=20Bjarmason?=
|
|
<avarab@gmail.com>
|
|
Date: Tue, 20 Dec 2022 14:40:18 +0100
|
|
Subject: [PATCH] bundle: don't segfault on "git bundle <subcmd>"
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Since aef7d75e580 (builtin/bundle.c: let parse-options parse
|
|
subcommands, 2022-08-19) we've been segfaulting if no argument was
|
|
provided.
|
|
|
|
The fix is easy, as all of the "git bundle" subcommands require a
|
|
non-option argument we can check that we have arguments left after
|
|
calling parse-options().
|
|
|
|
This makes use of code added in 73c3253d75e (bundle: framework for
|
|
options before bundle file, 2019-11-10), before this change that code
|
|
has always been unreachable. In 73c3253d75e we'd never reach it as we
|
|
already checked "argc < 2" in cmd_bundle() itself.
|
|
|
|
Then when aef7d75e580 (whose segfault we're fixing here) migrated this
|
|
code to the subcommand API it removed that "argc < 2" check, but we
|
|
were still checking the wrong "argc" in parse_options_cmd_bundle(), we
|
|
need to check the "newargc". The "argc" will always be >= 1, as it
|
|
will necessarily contain at least the subcommand name
|
|
itself (e.g. "create").
|
|
|
|
As an aside, this could be safely squashed into this, but let's not do
|
|
that for this minimal segfault fix, as it's an unrelated refactoring:
|
|
|
|
Reported-by: Hubert Jasudowicz <hubertj@stmcyber.pl>
|
|
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
|
|
Tested-by: Hubert Jasudowicz <hubertj@stmcyber.pl>
|
|
Signed-off-by: Junio C Hamano <gitster@pobox.com>
|
|
---
|
|
builtin/bundle.c | 2 +-
|
|
t/t6020-bundle-misc.sh | 7 +++++++
|
|
2 files changed, 8 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/builtin/bundle.c b/builtin/bundle.c
|
|
index c12c09f..61c7628 100644
|
|
--- a/builtin/bundle.c
|
|
+++ b/builtin/bundle.c
|
|
@@ -58,7 +58,7 @@ static int parse_options_cmd_bundle(int argc,
|
|
int newargc;
|
|
newargc = parse_options(argc, argv, NULL, options, usagestr,
|
|
PARSE_OPT_STOP_AT_NON_OPTION);
|
|
- if (argc < 1)
|
|
+ if (!newargc)
|
|
usage_with_options(usagestr, options);
|
|
*bundle_file = prefix_filename(prefix, argv[0]);
|
|
return newargc;
|
|
diff --git a/t/t6020-bundle-misc.sh b/t/t6020-bundle-misc.sh
|
|
index 8332051..3a1cf30 100755
|
|
--- a/t/t6020-bundle-misc.sh
|
|
+++ b/t/t6020-bundle-misc.sh
|
|
@@ -11,6 +11,13 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
|
. ./test-lib.sh
|
|
. "$TEST_DIRECTORY"/lib-bundle.sh
|
|
|
|
+for cmd in create verify list-heads unbundle
|
|
+do
|
|
+ test_expect_success "usage: git bundle $cmd needs an argument" '
|
|
+ test_expect_code 129 git bundle $cmd
|
|
+ '
|
|
+done
|
|
+
|
|
# Create a commit or tag and set the variable with the object ID.
|
|
test_commit_setvar () {
|
|
notick=
|