diff --git a/0001-builtin-init-db-handle-bare-clones-when-core.bare-se.patch b/0001-builtin-init-db-handle-bare-clones-when-core.bare-se.patch new file mode 100644 index 0000000..b8bc81b --- /dev/null +++ b/0001-builtin-init-db-handle-bare-clones-when-core.bare-se.patch @@ -0,0 +1,81 @@ +From 7fc363e4e64f095553e1a1ceed27caef3a33effd Mon Sep 17 00:00:00 2001 +From: "brian m. carlson" +Date: Wed, 10 Mar 2021 01:11:20 +0000 +Subject: [PATCH] builtin/init-db: handle bare clones when core.bare set to + false + +In 552955ed7f ("clone: use more conventional config/option layering", +2020-10-01), clone learned to read configuration options earlier in its +execution, before creating the new repository. However, that led to a +problem: if the core.bare setting is set to false in the global config, +cloning a bare repository segfaults. This happens because the +repository is falsely thought to be non-bare, but clone has set the work +tree to NULL, which is then dereferenced. + +The code to initialize the repository already considers the fact that a +user might want to override the --bare option for git init, but it +doesn't take into account clone, which uses a different option. Let's +just check that the work tree is not NULL, since that's how clone +indicates that the repository is bare. This is also the case for git +init, so we won't be regressing that case. + +Reported-by: Joseph Vusich +Signed-off-by: brian m. carlson +Signed-off-by: Junio C Hamano +(cherry picked from commit 75555676ad3908b0f847a9ae154c35e12114c82f) +--- + builtin/init-db.c | 4 ++-- + t/t5606-clone-options.sh | 8 ++++++++ + 2 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/builtin/init-db.c b/builtin/init-db.c +index dcc45bef51..f82efe4aff 100644 +--- a/builtin/init-db.c ++++ b/builtin/init-db.c +@@ -212,6 +212,7 @@ static int create_default_files(const char *template_path, + int reinit; + int filemode; + struct strbuf err = STRBUF_INIT; ++ const char *work_tree = get_git_work_tree(); + + /* Just look for `init.templatedir` */ + init_db_template_dir = NULL; /* re-set in case it was set before */ +@@ -235,7 +236,7 @@ static int create_default_files(const char *template_path, + * We must make sure command-line options continue to override any + * values we might have just re-read from the config. + */ +- is_bare_repository_cfg = init_is_bare_repository; ++ is_bare_repository_cfg = init_is_bare_repository || !work_tree; + if (init_shared_repository != -1) + set_shared_repository(init_shared_repository); + +@@ -299,7 +300,6 @@ static int create_default_files(const char *template_path, + if (is_bare_repository()) + git_config_set("core.bare", "true"); + else { +- const char *work_tree = get_git_work_tree(); + git_config_set("core.bare", "false"); + /* allow template config file to override the default */ + if (log_all_ref_updates == LOG_REFS_UNSET) +diff --git a/t/t5606-clone-options.sh b/t/t5606-clone-options.sh +index 1da6ddb2c5..428b0aac93 100755 +--- a/t/t5606-clone-options.sh ++++ b/t/t5606-clone-options.sh +@@ -104,6 +104,14 @@ test_expect_success 'redirected clone -v does show progress' ' + + ' + ++test_expect_success 'clone does not segfault with --bare and core.bare=false' ' ++ test_config_global core.bare false && ++ git clone --bare parent clone-bare && ++ echo true >expect && ++ git -C clone-bare rev-parse --is-bare-repository >actual && ++ test_cmp expect actual ++' ++ + test_expect_success 'chooses correct default initial branch name' ' + GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \ + git -c init.defaultBranch=foo init --bare empty && +-- +2.31.1 + diff --git a/git.spec b/git.spec index ebf8e24..76c25c7 100644 --- a/git.spec +++ b/git.spec @@ -97,7 +97,7 @@ Name: git Version: 2.31.1 -Release: 2%{?rcrev}%{?dist} +Release: 3%{?rcrev}%{?dist} Summary: Fast Version Control System License: GPLv2 URL: https://git-scm.com/ @@ -129,6 +129,11 @@ Source99: print-failed-test-output # https://bugzilla.redhat.com/490602 Patch0: git-cvsimport-Ignore-cvsps-2.2b1-Branches-output.patch +# https://bugzilla.redhat.com/1952030 +# https://lore.kernel.org/git/D99DD9AD-54E5-4357-BA50-8B9CAE23084E@amazon.com/ +# https://github.com/git/git/commit/75555676ad +Patch1: 0001-builtin-init-db-handle-bare-clones-when-core.bare-se.patch + %if %{with docs} # pod2man is needed to build Git.3pm BuildRequires: %{_bindir}/pod2man @@ -1068,6 +1073,10 @@ rmdir --ignore-fail-on-non-empty "$testdir" %{?with_docs:%{_pkgdocdir}/git-svn.html} %changelog +* Wed Apr 21 2021 Todd Zullinger - 2.31.1-3 +- apply upstream patch to fix clone --bare segfault + Resolves: rhbz#1952030 + * Tue Apr 06 2021 Todd Zullinger - 2.31.1-2 - remove two stray %%defattr macros from %%files sections