import UBI git-2.52.0-1.el10

This commit is contained in:
AlmaLinux RelEng Bot 2026-05-19 19:12:49 -04:00
parent 919a89d3e4
commit 8a05c30634
6 changed files with 405 additions and 261 deletions

4
.gitignore vendored
View File

@ -1,2 +1,2 @@
git-2.47.3.tar.sign git-2.52.0.tar.sign
git-2.47.3.tar.xz git-2.52.0.tar.xz

View File

@ -1,219 +0,0 @@
From 833c73801527b37d9bc725c81c6042ae350aaae3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20Poho=C5=99elsk=C3=BD?= <opohorel@redhat.com>
Date: Fri, 28 Mar 2025 13:26:29 +0100
Subject: [PATCH] Adds the option to sanitize sideband channel messages
CVE-2024-52005 wasn't fixed by upstream. This patch adds the option
to harden Git against it.
The default behaviour of Git remains unchanged.
Changes are taken from Git for Windows. The only differences are that
by default we are allowing all control characters, the documentation
reflects it and one of the tests has to be invoked with a config
change: `sideband.allowControlCharacters=color`
These commits can also be seen in this upstream PR:
https://github.com/gitgitgadget/git/pull/1853
---
Documentation/config.txt | 2 +
Documentation/config/sideband.txt | 16 ++++++
sideband.c | 78 ++++++++++++++++++++++++++++-
t/t5409-colorize-remote-messages.sh | 30 +++++++++++
4 files changed, 124 insertions(+), 2 deletions(-)
create mode 100644 Documentation/config/sideband.txt
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 8c0b3ed807..48870bb588 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -522,6 +522,8 @@ include::config/sequencer.txt[]
include::config/showbranch.txt[]
+include::config/sideband.txt[]
+
include::config/sparse.txt[]
include::config/splitindex.txt[]
diff --git a/Documentation/config/sideband.txt b/Documentation/config/sideband.txt
new file mode 100644
index 0000000000..1adc831667
--- /dev/null
+++ b/Documentation/config/sideband.txt
@@ -0,0 +1,16 @@
+sideband.allowControlCharacters::
+ By default, control characters that are delivered via the sideband
+ are NOT masked. Use this config setting to prevent potentially
+ unwanted ANSI escape sequences from being sent to the terminal:
++
+--
+ color::
+ Allow ANSI color sequences, line feeds and horizontal tabs,
+ but mask all other control characters.
+ false::
+ Mask all control characters other than line feeds and
+ horizontal tabs.
+ true::
+ Allow all control characters to be sent to the terminal.
+ This is the default.
+--
\ No newline at end of file
diff --git a/sideband.c b/sideband.c
index 02805573fa..7a0ca61948 100644
--- a/sideband.c
+++ b/sideband.c
@@ -25,6 +25,12 @@ static struct keyword_entry keywords[] = {
{ "error", GIT_COLOR_BOLD_RED },
};
+static enum {
+ ALLOW_NO_CONTROL_CHARACTERS = 0,
+ ALLOW_ALL_CONTROL_CHARACTERS = 1,
+ ALLOW_ANSI_COLOR_SEQUENCES = 2
+} allow_control_characters = ALLOW_ALL_CONTROL_CHARACTERS;
+
/* Returns a color setting (GIT_COLOR_NEVER, etc). */
static int use_sideband_colors(void)
{
@@ -38,6 +44,25 @@ static int use_sideband_colors(void)
if (use_sideband_colors_cached >= 0)
return use_sideband_colors_cached;
+ switch (git_config_get_maybe_bool("sideband.allowcontrolcharacters", &i)) {
+ case 0: /* Boolean value */
+ allow_control_characters = i ? ALLOW_ALL_CONTROL_CHARACTERS :
+ ALLOW_NO_CONTROL_CHARACTERS;
+ break;
+ case -1: /* non-Boolean value */
+ if (git_config_get_string_tmp("sideband.allowcontrolcharacters",
+ &value))
+ ; /* huh? `get_maybe_bool()` returned -1 */
+ else if (!strcmp(value, "color"))
+ allow_control_characters = ALLOW_ANSI_COLOR_SEQUENCES;
+ else
+ warning(_("unrecognized value for `sideband."
+ "allowControlCharacters`: '%s'"), value);
+ break;
+ default:
+ break; /* not configured */
+ }
+
if (!git_config_get_string_tmp(key, &value))
use_sideband_colors_cached = git_config_colorbool(key, value);
else if (!git_config_get_string_tmp("color.ui", &value))
@@ -65,6 +90,55 @@ void list_config_color_sideband_slots(struct string_list *list, const char *pref
list_config_item(list, prefix, keywords[i].keyword);
}
+static int handle_ansi_color_sequence(struct strbuf *dest, const char *src, int n)
+{
+ int i;
+
+ /*
+ * Valid ANSI color sequences are of the form
+ *
+ * ESC [ [<n> [; <n>]*] m
+ */
+
+ if (allow_control_characters != ALLOW_ANSI_COLOR_SEQUENCES ||
+ n < 3 || src[0] != '\x1b' || src[1] != '[')
+ return 0;
+
+ for (i = 2; i < n; i++) {
+ if (src[i] == 'm') {
+ strbuf_add(dest, src, i + 1);
+ return i;
+ }
+ if (!isdigit(src[i]) && src[i] != ';')
+ break;
+ }
+
+ return 0;
+}
+
+static void strbuf_add_sanitized(struct strbuf *dest, const char *src, int n)
+{
+ int i;
+
+ if (allow_control_characters == ALLOW_ALL_CONTROL_CHARACTERS) {
+ strbuf_add(dest, src, n);
+ return;
+ }
+
+ strbuf_grow(dest, n);
+ for (; n && *src; src++, n--) {
+ if (!iscntrl(*src) || *src == '\t' || *src == '\n')
+ strbuf_addch(dest, *src);
+ else if ((i = handle_ansi_color_sequence(dest, src, n))) {
+ src += i;
+ n -= i;
+ } else {
+ strbuf_addch(dest, '^');
+ strbuf_addch(dest, 0x40 + *src);
+ }
+ }
+}
+
/*
* Optionally highlight one keyword in remote output if it appears at the start
* of the line. This should be called for a single line only, which is
@@ -80,7 +154,7 @@ static void maybe_colorize_sideband(struct strbuf *dest, const char *src, int n)
int i;
if (!want_color_stderr(use_sideband_colors())) {
- strbuf_add(dest, src, n);
+ strbuf_add_sanitized(dest, src, n);
return;
}
@@ -113,7 +187,7 @@ static void maybe_colorize_sideband(struct strbuf *dest, const char *src, int n)
}
}
- strbuf_add(dest, src, n);
+ strbuf_add_sanitized(dest, src, n);
}
diff --git a/t/t5409-colorize-remote-messages.sh b/t/t5409-colorize-remote-messages.sh
index 516b22fd96..48f8413eff 100755
--- a/t/t5409-colorize-remote-messages.sh
+++ b/t/t5409-colorize-remote-messages.sh
@@ -99,4 +99,34 @@ test_expect_success 'fallback to color.ui' '
grep "<BOLD;RED>error<RESET>: error" decoded
'
+test_expect_success 'disallow (color) control sequences in sideband' '
+ write_script .git/color-me-surprised <<-\EOF &&
+ printf "error: Have you \\033[31mread\\033[m this?\\a\\n" >&2
+ exec "$@"
+ EOF
+ test_config_global uploadPack.packObjectshook ./color-me-surprised &&
+ test_commit need-at-least-one-commit &&
+ git -c sideband.allowControlCharacters=color \
+ clone --no-local . throw-away 2>stderr &&
+ test_decode_color <stderr >decoded &&
+ test_grep RED decoded &&
+ test_grep "\\^G" stderr &&
+ tr -dc "\\007" <stderr >actual &&
+ test_must_be_empty actual &&
+
+ rm -rf throw-away &&
+ git -c sideband.allowControlCharacters=false \
+ clone --no-local . throw-away 2>stderr &&
+ test_decode_color <stderr >decoded &&
+ test_grep ! RED decoded &&
+ test_grep "\\^G" stderr &&
+
+ rm -rf throw-away &&
+ git -c sideband.allowControlCharacters clone --no-local . throw-away 2>stderr &&
+ test_decode_color <stderr >decoded &&
+ test_grep RED decoded &&
+ tr -dc "\\007" <stderr >actual &&
+ test_file_not_empty actual
+'
+
test_done
--
2.49.0

View File

@ -0,0 +1,85 @@
From 17acaf144b882d7312b147ac4a1d39158a82534d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20Poho=C5=99elsk=C3=BD?= <opohorel@redhat.com>
Date: Fri, 9 Jan 2026 14:49:51 +0100
Subject: [PATCH] git-2.52.0-core-crypto-hmac.patch
---
Makefile | 2 ++
builtin/receive-pack.c | 38 ++++----------------------------------
2 files changed, 6 insertions(+), 34 deletions(-)
diff --git a/Makefile b/Makefile
index 7e0f77e298..a106eaa79d 100644
--- a/Makefile
+++ b/Makefile
@@ -2278,6 +2278,8 @@ ifneq ($(findstring openssl,$(CSPRNG_METHOD)),)
EXTLIBS += -lcrypto -lssl
endif
+EXTLIBS += -lcrypto
+
ifndef HAVE_PLATFORM_PROCINFO
COMPAT_OBJS += compat/stub/procinfo.o
endif
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index c9288a9c7e..48ad30fb0a 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -43,6 +43,8 @@
#include "worktree.h"
#include "shallow.h"
#include "parse-options.h"
+#include <openssl/hmac.h>
+#include <openssl/evp.h>
static const char * const receive_pack_usage[] = {
N_("git receive-pack <git-dir>"),
@@ -561,43 +563,11 @@ static int copy_to_sideband(int in, int out UNUSED, void *arg UNUSED)
return 0;
}
-static void hmac_hash(unsigned char *out,
+static inline void hmac_hash(unsigned char *out,
const char *key_in, size_t key_len,
const char *text, size_t text_len)
{
- unsigned char key[GIT_MAX_BLKSZ];
- unsigned char k_ipad[GIT_MAX_BLKSZ];
- unsigned char k_opad[GIT_MAX_BLKSZ];
- int i;
- struct git_hash_ctx ctx;
-
- /* RFC 2104 2. (1) */
- memset(key, '\0', GIT_MAX_BLKSZ);
- if (the_hash_algo->blksz < key_len) {
- the_hash_algo->init_fn(&ctx);
- git_hash_update(&ctx, key_in, key_len);
- git_hash_final(key, &ctx);
- } else {
- memcpy(key, key_in, key_len);
- }
-
- /* RFC 2104 2. (2) & (5) */
- for (i = 0; i < sizeof(key); i++) {
- k_ipad[i] = key[i] ^ 0x36;
- k_opad[i] = key[i] ^ 0x5c;
- }
-
- /* RFC 2104 2. (3) & (4) */
- the_hash_algo->init_fn(&ctx);
- git_hash_update(&ctx, k_ipad, sizeof(k_ipad));
- git_hash_update(&ctx, text, text_len);
- git_hash_final(out, &ctx);
-
- /* RFC 2104 2. (6) & (7) */
- the_hash_algo->init_fn(&ctx);
- git_hash_update(&ctx, k_opad, sizeof(k_opad));
- git_hash_update(&ctx, out, the_hash_algo->rawsz);
- git_hash_final(out, &ctx);
+ HMAC(EVP_sha1(), key_in, key_len, text, text_len, out, NULL);
}
static char *prepare_push_cert_nonce(const char *path, timestamp_t stamp)
--
2.52.0

View File

@ -0,0 +1,275 @@
From 65e88e659008e2cbf79cf44975406ff0d569a3a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20Poho=C5=99elsk=C3=BD?= <opohorel@redhat.com>
Date: Thu, 20 Nov 2025 12:24:59 +0100
Subject: [PATCH] sideband: mask control characters
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The output of `git clone` is a vital component for understanding what
has happened when things go wrong. However, these logs are partially
under the control of the remote server (via the "sideband", which
typically contains what the remote `git pack-objects` process sends to
`stderr`), and is currently not sanitized by Git.
This makes Git susceptible to ANSI escape sequence injection (see
CWE-150, https://cwe.mitre.org/data/definitions/150.html), which allows
attackers to corrupt terminal state, to hide information, and even to
insert characters into the input buffer (i.e. as if the user had typed
those characters).
To plug this vulnerability, disallow any control character in the
sideband, replacing them instead with the common `^<letter/symbol>`
(e.g. `^[` for `\x1b`, `^A` for `\x01`).
There is likely a need for more fine-grained controls instead of using a
"heavy hammer" like this, which will be introduced subsequently.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
sideband: introduce an "escape hatch" to allow control characters
The preceding commit fixed the vulnerability whereas sideband messages
(that are under the control of the remote server) could contain ANSI
escape sequences that would be sent to the terminal verbatim.
However, this fix may not be desirable under all circumstances, e.g.
when remote servers deliberately add coloring to their messages to
increase their urgency.
To help with those use cases, give users a way to opt-out of the
protections: `sideband.allowControlCharacters`.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
sideband: do allow ANSI color sequences by default
The preceding two commits introduced special handling of the sideband
channel to neutralize ANSI escape sequences before sending the payload
to the terminal, and `sideband.allowControlCharacters` to override that
behavior.
However, some `pre-receive` hooks that are actively used in practice
want to color their messages and therefore rely on the fact that Git
passes them through to the terminal.
In contrast to other ANSI escape sequences, it is highly unlikely that
coloring sequences can be essential tools in attack vectors that mislead
Git users e.g. by hiding crucial information.
Therefore we can have both: Continue to allow ANSI coloring sequences to
be passed to the terminal, and neutralize all other ANSI escape
sequences.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
sideband: default to allowControlCharacters=true
We don't want to change the default Git behaviour, just add the option
to filter control characters.
Signed-off-by: Ondřej Pohořelský <opohorel@redhat.com>
---
Documentation/config.adoc | 2 +
Documentation/config/sideband.adoc | 16 ++++++
sideband.c | 78 ++++++++++++++++++++++++++++-
t/t5409-colorize-remote-messages.sh | 31 ++++++++++++
4 files changed, 125 insertions(+), 2 deletions(-)
create mode 100644 Documentation/config/sideband.adoc
diff --git a/Documentation/config.adoc b/Documentation/config.adoc
index 62eebe7c54..dcea3c0c15 100644
--- a/Documentation/config.adoc
+++ b/Documentation/config.adoc
@@ -523,6 +523,8 @@ include::config/sequencer.adoc[]
include::config/showbranch.adoc[]
+include::config/sideband.adoc[]
+
include::config/sparse.adoc[]
include::config/splitindex.adoc[]
diff --git a/Documentation/config/sideband.adoc b/Documentation/config/sideband.adoc
new file mode 100644
index 0000000000..c9ba24a02c
--- /dev/null
+++ b/Documentation/config/sideband.adoc
@@ -0,0 +1,16 @@
+sideband.allowControlCharacters::
+ By default, control characters that are delivered via the sideband
+ are NOT masked. Use this config setting to prevent potentially
+ unwanted ANSI escape sequences from being sent to the terminal:
++
+--
+ color::
+ Allow ANSI color sequences, line feeds and horizontal tabs,
+ but mask all other control characters.
+ false::
+ Mask all control characters other than line feeds and
+ horizontal tabs.
+ true::
+ Allow all control characters to be sent to the terminal.
+ This is the default.
+--
\ No newline at end of file
diff --git a/sideband.c b/sideband.c
index ea7c25211e..88d1b44a7a 100644
--- a/sideband.c
+++ b/sideband.c
@@ -26,6 +26,12 @@ static struct keyword_entry keywords[] = {
{ "error", GIT_COLOR_BOLD_RED },
};
+static enum {
+ ALLOW_NO_CONTROL_CHARACTERS = 0,
+ ALLOW_ALL_CONTROL_CHARACTERS = 1,
+ ALLOW_ANSI_COLOR_SEQUENCES = 2
+} allow_control_characters = ALLOW_ALL_CONTROL_CHARACTERS;
+
/* Returns a color setting (GIT_COLOR_NEVER, etc). */
static enum git_colorbool use_sideband_colors(void)
{
@@ -39,6 +45,25 @@ static enum git_colorbool use_sideband_colors(void)
if (use_sideband_colors_cached != GIT_COLOR_UNKNOWN)
return use_sideband_colors_cached;
+ switch (repo_config_get_maybe_bool(the_repository, "sideband.allowcontrolcharacters", &i)) {
+ case 0: /* Boolean value */
+ allow_control_characters = i ? ALLOW_ALL_CONTROL_CHARACTERS :
+ ALLOW_NO_CONTROL_CHARACTERS;
+ break;
+ case -1: /* non-Boolean value */
+ if (repo_config_get_string_tmp(the_repository, "sideband.allowcontrolcharacters",
+ &value))
+ ; /* huh? `get_maybe_bool()` returned -1 */
+ else if (!strcmp(value, "color"))
+ allow_control_characters = ALLOW_ANSI_COLOR_SEQUENCES;
+ else
+ warning(_("unrecognized value for `sideband."
+ "allowControlCharacters`: '%s'"), value);
+ break;
+ default:
+ break; /* not configured */
+ }
+
if (!repo_config_get_string_tmp(the_repository, key, &value))
use_sideband_colors_cached = git_config_colorbool(key, value);
else if (!repo_config_get_string_tmp(the_repository, "color.ui", &value))
@@ -66,6 +91,55 @@ void list_config_color_sideband_slots(struct string_list *list, const char *pref
list_config_item(list, prefix, keywords[i].keyword);
}
+static int handle_ansi_color_sequence(struct strbuf *dest, const char *src, int n)
+{
+ int i;
+
+ /*
+ * Valid ANSI color sequences are of the form
+ *
+ * ESC [ [<n> [; <n>]*] m
+ */
+
+ if (allow_control_characters != ALLOW_ANSI_COLOR_SEQUENCES ||
+ n < 3 || src[0] != '\x1b' || src[1] != '[')
+ return 0;
+
+ for (i = 2; i < n; i++) {
+ if (src[i] == 'm') {
+ strbuf_add(dest, src, i + 1);
+ return i;
+ }
+ if (!isdigit(src[i]) && src[i] != ';')
+ break;
+ }
+
+ return 0;
+}
+
+static void strbuf_add_sanitized(struct strbuf *dest, const char *src, int n)
+{
+ int i;
+
+ if (allow_control_characters == ALLOW_ALL_CONTROL_CHARACTERS) {
+ strbuf_add(dest, src, n);
+ return;
+ }
+
+ strbuf_grow(dest, n);
+ for (; n && *src; src++, n--) {
+ if (!iscntrl(*src) || *src == '\t' || *src == '\n')
+ strbuf_addch(dest, *src);
+ else if ((i = handle_ansi_color_sequence(dest, src, n))) {
+ src += i;
+ n -= i;
+ } else {
+ strbuf_addch(dest, '^');
+ strbuf_addch(dest, 0x40 + *src);
+ }
+ }
+}
+
/*
* Optionally highlight one keyword in remote output if it appears at the start
* of the line. This should be called for a single line only, which is
@@ -81,7 +155,7 @@ static void maybe_colorize_sideband(struct strbuf *dest, const char *src, int n)
int i;
if (!want_color_stderr(use_sideband_colors())) {
- strbuf_add(dest, src, n);
+ strbuf_add_sanitized(dest, src, n);
return;
}
@@ -114,7 +188,7 @@ static void maybe_colorize_sideband(struct strbuf *dest, const char *src, int n)
}
}
- strbuf_add(dest, src, n);
+ strbuf_add_sanitized(dest, src, n);
}
diff --git a/t/t5409-colorize-remote-messages.sh b/t/t5409-colorize-remote-messages.sh
index fa5de4500a..2d40d8c640 100755
--- a/t/t5409-colorize-remote-messages.sh
+++ b/t/t5409-colorize-remote-messages.sh
@@ -98,4 +98,35 @@ test_expect_success 'fallback to color.ui' '
grep "<BOLD;RED>error<RESET>: error" decoded
'
+test_expect_success 'disallow (color) control sequences in sideband' '
+ write_script .git/color-me-surprised <<-\EOF &&
+ printf "error: Have you \\033[31mread\\033[m this?\\a\\n" >&2
+ exec "$@"
+ EOF
+ test_config_global uploadPack.packObjectshook ./color-me-surprised &&
+ test_commit need-at-least-one-commit &&
+
+ git -c sideband.allowControlCharacters=color \
+ clone --no-local . throw-away 2>stderr &&
+ test_decode_color <stderr >decoded &&
+ test_grep RED decoded &&
+ test_grep "\\^G" stderr &&
+ tr -dc "\\007" <stderr >actual &&
+ test_must_be_empty actual &&
+
+ rm -rf throw-away &&
+ git -c sideband.allowControlCharacters=false \
+ clone --no-local . throw-away 2>stderr &&
+ test_decode_color <stderr >decoded &&
+ test_grep ! RED decoded &&
+ test_grep "\\^G" stderr &&
+
+ rm -rf throw-away &&
+ git -c sideband.allowControlCharacters clone --no-local . throw-away 2>stderr &&
+ test_decode_color <stderr >decoded &&
+ test_grep RED decoded &&
+ tr -dc "\\007" <stderr >actual &&
+ test_file_not_empty actual
+'
+
test_done
--
2.51.1

View File

@ -78,7 +78,7 @@
%global _package_note_file %{_builddir}/%{name}-%{real_version}/.package_note-%{name}-%{version}-%{release}.%{_arch}.ld %global _package_note_file %{_builddir}/%{name}-%{real_version}/.package_note-%{name}-%{version}-%{release}.%{_arch}.ld
Name: git Name: git
Version: 2.47.3 Version: 2.52.0
Release: 1%{?dist} Release: 1%{?dist}
Summary: Fast Version Control System Summary: Fast Version Control System
License: BSD-3-Clause AND GPL-2.0-only AND GPL-2.0-or-later AND LGPL-2.1-or-later AND MIT License: BSD-3-Clause AND GPL-2.0-only AND GPL-2.0-or-later AND LGPL-2.1-or-later AND MIT
@ -118,15 +118,18 @@ Source99: print-failed-test-output
# https://bugzilla.redhat.com/490602 # https://bugzilla.redhat.com/490602
Patch0: git-cvsimport-Ignore-cvsps-2.2b1-Branches-output.patch Patch0: git-cvsimport-Ignore-cvsps-2.2b1-Branches-output.patch
# https://bugzilla.redhat.com/1956345
Patch1: git-2.52-core-crypto-hmac.patch
# https://bugzilla.redhat.com/2114531 # https://bugzilla.redhat.com/2114531
# tests: try harder to find open ports for apache, git, and svn # tests: try harder to find open ports for apache, git, and svn
# #
# https://github.com/tmzullinger/git/commit/aedeaaf788 # https://github.com/tmzullinger/git/commit/aedeaaf788
Patch1: 0001-t-lib-httpd-try-harder-to-find-a-port-for-apache.patch Patch2: 0001-t-lib-httpd-try-harder-to-find-a-port-for-apache.patch
# https://github.com/tmzullinger/git/commit/16750d024c # https://github.com/tmzullinger/git/commit/16750d024c
Patch2: 0002-t-lib-git-daemon-try-harder-to-find-a-port.patch Patch3: 0002-t-lib-git-daemon-try-harder-to-find-a-port.patch
# https://github.com/tmzullinger/git/commit/aa5105dc11 # https://github.com/tmzullinger/git/commit/aa5105dc11
Patch3: 0003-t-lib-git-svn-try-harder-to-find-a-port.patch Patch4: 0003-t-lib-git-svn-try-harder-to-find-a-port.patch
# Configurates Apache test server to use `DavLockDBType sdbm` # Configurates Apache test server to use `DavLockDBType sdbm`
# Prevents t5540 failures on i686, s390x and ppc64le # Prevents t5540 failures on i686, s390x and ppc64le
@ -136,8 +139,8 @@ Patch5: git-test-apache-davlockdbtype-config.patch
# CVE-2024-52005 wasn't fixed by upstream. This patch adds the option to harden Git against it. # CVE-2024-52005 wasn't fixed by upstream. This patch adds the option to harden Git against it.
# The default behaviour of Git remains unchanged. # The default behaviour of Git remains unchanged.
# #
# https://github.com/gitgitgadget/git/pull/1853 # https://github.com/gitgitgadget/git/pull/1853
Patch6: git-2.47-sanitize-sideband-channel-messages.patch Patch6: git-2.52-sanitize-sideband-channel-messages.patch
%if %{with docs} %if %{with docs}
# pod2man is needed to build Git.3pm # pod2man is needed to build Git.3pm
@ -543,7 +546,7 @@ install -p -m 755 %{SOURCE99} print-failed-test-output
# Remove git-archimport # Remove git-archimport
sed -i '/^SCRIPT_PERL += git-archimport\.perl$/d' Makefile sed -i '/^SCRIPT_PERL += git-archimport\.perl$/d' Makefile
sed -i '/^git-archimport/d' command-list.txt sed -i '/^git-archimport/d' command-list.txt
rm git-archimport.perl Documentation/git-archimport.txt rm git-archimport.perl Documentation/git-archimport.adoc
%if %{without cvs} %if %{without cvs}
# Remove git-cvs* from command list # Remove git-cvs* from command list
@ -605,6 +608,9 @@ EOF
%endif %endif
# endif ! defined perl_bootstrap # endif ! defined perl_bootstrap
# Exclude sample hook files from automatic dependency detection
%global __requires_exclude_from ^%{_datadir}/git-core/templates/hooks/.*sample$
# Remove Git::LoadCPAN to ensure we use only system perl modules. This also # Remove Git::LoadCPAN to ensure we use only system perl modules. This also
# allows the dependencies to be automatically processed by rpm. # allows the dependencies to be automatically processed by rpm.
rm -rf perl/Git/LoadCPAN{.pm,/} rm -rf perl/Git/LoadCPAN{.pm,/}
@ -616,7 +622,7 @@ sed -i 's@"++GITWEB_HOME_LINK_STR++"@$ENV{"SERVER_NAME"} ? "git://" . $ENV{"SERV
# Move contrib/{contacts,subtree} docs to Documentation so they build with the # Move contrib/{contacts,subtree} docs to Documentation so they build with the
# proper asciidoc/docbook/xmlto options # proper asciidoc/docbook/xmlto options
mv contrib/{contacts,subtree}/git-*.txt Documentation/ mv contrib/{contacts,subtree}/git-*.adoc Documentation/
%build %build
# Improve build reproducibility # Improve build reproducibility
@ -734,13 +740,6 @@ mkdir -p %{buildroot}%{_datadir}/git-core/contrib/completion
install -pm 644 contrib/completion/git-completion.tcsh \ install -pm 644 contrib/completion/git-completion.tcsh \
%{buildroot}%{_datadir}/git-core/contrib/completion/ %{buildroot}%{_datadir}/git-core/contrib/completion/
# Move contrib/hooks out of %%docdir
mkdir -p %{buildroot}%{_datadir}/git-core/contrib
mv contrib/hooks %{buildroot}%{_datadir}/git-core/contrib
pushd contrib > /dev/null
ln -s ../../../git-core/contrib/hooks
popd > /dev/null
# Install git-prompt.sh # Install git-prompt.sh
mkdir -p %{buildroot}%{_datadir}/git-core/contrib/completion mkdir -p %{buildroot}%{_datadir}/git-core/contrib/completion
install -pm 644 contrib/completion/git-prompt.sh \ install -pm 644 contrib/completion/git-prompt.sh \
@ -783,7 +782,7 @@ grep -E "$not_core_re" bin-man-doc-files > bin-man-doc-git-files
# contrib # contrib
not_core_doc_re="(git-(cvs|gui|citool|daemon|instaweb|subtree))|p4|svn|email|gitk|gitweb" not_core_doc_re="(git-(cvs|gui|citool|daemon|instaweb|subtree))|p4|svn|email|gitk|gitweb"
mkdir -p %{buildroot}%{_pkgdocdir}/ mkdir -p %{buildroot}%{_pkgdocdir}/
cp -pr CODE_OF_CONDUCT.md README.md Documentation/*.txt Documentation/RelNotes contrib %{buildroot}%{_pkgdocdir}/ cp -pr CODE_OF_CONDUCT.md README.md Documentation/*.adoc Documentation/RelNotes contrib %{buildroot}%{_pkgdocdir}/
# Remove contrib/ files/dirs which have nothing useful for documentation # Remove contrib/ files/dirs which have nothing useful for documentation
rm -rf %{buildroot}%{_pkgdocdir}/contrib/{contacts,credential}/ rm -rf %{buildroot}%{_pkgdocdir}/contrib/{contacts,credential}/
cp -p gitweb/INSTALL %{buildroot}%{_pkgdocdir}/INSTALL.gitweb cp -p gitweb/INSTALL %{buildroot}%{_pkgdocdir}/INSTALL.gitweb
@ -875,6 +874,17 @@ GIT_SKIP_TESTS="$GIT_SKIP_TESTS t5300.1[02348] t5300.2[03459] t5300.30 t5300.4[5
%endif %endif
# endif rhel == 8 && arch == s390x # endif rhel == 8 && arch == s390x
%if "%{_arch}" == "s390x"
# Skip tests which fail on s390x
#
# The following tests are failing on s390x.
# https://lore.kernel.org/git/4dc4c8cd-c0cc-4784-8fcf-defa3a051087@mit.edu/
#
# t8020.16 'cross merge boundaries in blaming'
# t8020.19 'last-modified merge undoes changes'
GIT_SKIP_TESTS="$GIT_SKIP_TESTS t8020.16 t8020.19"
%endif
# endif "%{_arch}" == "s390x"
export GIT_SKIP_TESTS export GIT_SKIP_TESTS
# Set LANG so various UTF-8 tests are run # Set LANG so various UTF-8 tests are run
@ -920,11 +930,6 @@ rmdir --ignore-fail-on-non-empty "$testdir"
%files -f bin-man-doc-git-files %files -f bin-man-doc-git-files
%{_datadir}/git-core/contrib/diff-highlight %{_datadir}/git-core/contrib/diff-highlight
%{_datadir}/git-core/contrib/hooks/update-paranoid
%{_datadir}/git-core/contrib/hooks/setgitperms.perl
%{_datadir}/git-core/templates/hooks/fsmonitor-watchman.sample
%{_datadir}/git-core/templates/hooks/pre-rebase.sample
%{_datadir}/git-core/templates/hooks/prepare-commit-msg.sample
%files all %files all
# No files for you! # No files for you!
@ -936,11 +941,6 @@ rmdir --ignore-fail-on-non-empty "$testdir"
%license COPYING %license COPYING
# exclude is best way here because of troubles with symlinks inside git-core/ # exclude is best way here because of troubles with symlinks inside git-core/
%exclude %{_datadir}/git-core/contrib/diff-highlight %exclude %{_datadir}/git-core/contrib/diff-highlight
%exclude %{_datadir}/git-core/contrib/hooks/update-paranoid
%exclude %{_datadir}/git-core/contrib/hooks/setgitperms.perl
%exclude %{_datadir}/git-core/templates/hooks/fsmonitor-watchman.sample
%exclude %{_datadir}/git-core/templates/hooks/pre-rebase.sample
%exclude %{_datadir}/git-core/templates/hooks/prepare-commit-msg.sample
%{bash_completions_dir}/git %{bash_completions_dir}/git
%{_datadir}/git-core/ %{_datadir}/git-core/
@ -950,7 +950,6 @@ rmdir --ignore-fail-on-non-empty "$testdir"
%exclude %{_pkgdocdir}/contrib/*/*.py[co] %exclude %{_pkgdocdir}/contrib/*/*.py[co]
%endif %endif
# endif rhel <= 7 # endif rhel <= 7
%{_pkgdocdir}/contrib/hooks
%if %{with libsecret} %if %{with libsecret}
%files credential-libsecret %files credential-libsecret
@ -960,7 +959,7 @@ rmdir --ignore-fail-on-non-empty "$testdir"
%if %{with cvs} %if %{with cvs}
%files cvs %files cvs
%{_pkgdocdir}/*git-cvs*.txt %{_pkgdocdir}/*git-cvs*.adoc
%{_bindir}/git-cvsserver %{_bindir}/git-cvsserver
%{gitexecdir}/*cvs* %{gitexecdir}/*cvs*
%{?with_docs:%{_mandir}/man1/*cvs*.1*} %{?with_docs:%{_mandir}/man1/*cvs*.1*}
@ -969,7 +968,7 @@ rmdir --ignore-fail-on-non-empty "$testdir"
# endif with cvs # endif with cvs
%files daemon %files daemon
%{_pkgdocdir}/git-daemon*.txt %{_pkgdocdir}/git-daemon*.adoc
%{_unitdir}/git.socket %{_unitdir}/git.socket
%config(noreplace) %{_unitdir}/git@.service %config(noreplace) %{_unitdir}/git@.service
%{gitexecdir}/git-daemon %{gitexecdir}/git-daemon
@ -978,13 +977,13 @@ rmdir --ignore-fail-on-non-empty "$testdir"
%{?with_docs:%{_pkgdocdir}/git-daemon*.html} %{?with_docs:%{_pkgdocdir}/git-daemon*.html}
%files email %files email
%{_pkgdocdir}/*email*.txt %{_pkgdocdir}/*email*.adoc
%{gitexecdir}/*email* %{gitexecdir}/*email*
%{?with_docs:%{_mandir}/man1/*email*.1*} %{?with_docs:%{_mandir}/man1/*email*.1*}
%{?with_docs:%{_pkgdocdir}/*email*.html} %{?with_docs:%{_pkgdocdir}/*email*.html}
%files -n gitk %files -n gitk
%{_pkgdocdir}/*gitk*.txt %{_pkgdocdir}/*gitk*.adoc
%{_bindir}/*gitk* %{_bindir}/*gitk*
%{_datadir}/gitk %{_datadir}/gitk
%{bash_completions_dir}/gitk %{bash_completions_dir}/gitk
@ -993,7 +992,7 @@ rmdir --ignore-fail-on-non-empty "$testdir"
%files -n gitweb %files -n gitweb
%{_pkgdocdir}/*.gitweb %{_pkgdocdir}/*.gitweb
%{_pkgdocdir}/gitweb*.txt %{_pkgdocdir}/gitweb*.adoc
%{?with_docs:%{_mandir}/man1/gitweb.1*} %{?with_docs:%{_mandir}/man1/gitweb.1*}
%{?with_docs:%{_mandir}/man5/gitweb.conf.5*} %{?with_docs:%{_mandir}/man5/gitweb.conf.5*}
%{?with_docs:%{_pkgdocdir}/gitweb*.html} %{?with_docs:%{_pkgdocdir}/gitweb*.html}
@ -1006,8 +1005,8 @@ rmdir --ignore-fail-on-non-empty "$testdir"
%{gitexecdir}/git-citool %{gitexecdir}/git-citool
%{_datadir}/applications/*git-gui.desktop %{_datadir}/applications/*git-gui.desktop
%{_datadir}/git-gui/ %{_datadir}/git-gui/
%{_pkgdocdir}/git-gui.txt %{_pkgdocdir}/git-gui.adoc
%{_pkgdocdir}/git-citool.txt %{_pkgdocdir}/git-citool.adoc
%{?with_docs:%{_mandir}/man1/git-gui.1*} %{?with_docs:%{_mandir}/man1/git-gui.1*}
%{?with_docs:%{_pkgdocdir}/git-gui.html} %{?with_docs:%{_pkgdocdir}/git-gui.html}
%{?with_docs:%{_mandir}/man1/git-citool.1*} %{?with_docs:%{_mandir}/man1/git-citool.1*}
@ -1015,7 +1014,7 @@ rmdir --ignore-fail-on-non-empty "$testdir"
%files instaweb %files instaweb
%{gitexecdir}/git-instaweb %{gitexecdir}/git-instaweb
%{_pkgdocdir}/git-instaweb.txt %{_pkgdocdir}/git-instaweb.adoc
%{?with_docs:%{_mandir}/man1/git-instaweb.1*} %{?with_docs:%{_mandir}/man1/git-instaweb.1*}
%{?with_docs:%{_pkgdocdir}/git-instaweb.html} %{?with_docs:%{_pkgdocdir}/git-instaweb.html}
@ -1023,7 +1022,7 @@ rmdir --ignore-fail-on-non-empty "$testdir"
%files p4 %files p4
%{gitexecdir}/*p4* %{gitexecdir}/*p4*
%{gitexecdir}/mergetools/p4merge %{gitexecdir}/mergetools/p4merge
%{_pkgdocdir}/*p4*.txt %{_pkgdocdir}/*p4*.adoc
%{?with_docs:%{_mandir}/man1/*p4*.1*} %{?with_docs:%{_mandir}/man1/*p4*.1*}
%{?with_docs:%{_pkgdocdir}/*p4*.html} %{?with_docs:%{_pkgdocdir}/*p4*.html}
%endif %endif
@ -1036,17 +1035,21 @@ rmdir --ignore-fail-on-non-empty "$testdir"
%files subtree %files subtree
%{gitexecdir}/git-subtree %{gitexecdir}/git-subtree
%{_pkgdocdir}/git-subtree.txt %{_pkgdocdir}/git-subtree.adoc
%{?with_docs:%{_mandir}/man1/git-subtree.1*} %{?with_docs:%{_mandir}/man1/git-subtree.1*}
%{?with_docs:%{_pkgdocdir}/git-subtree.html} %{?with_docs:%{_pkgdocdir}/git-subtree.html}
%files svn %files svn
%{gitexecdir}/git-svn %{gitexecdir}/git-svn
%{_pkgdocdir}/git-svn.txt %{_pkgdocdir}/git-svn.adoc
%{?with_docs:%{_mandir}/man1/git-svn.1*} %{?with_docs:%{_mandir}/man1/git-svn.1*}
%{?with_docs:%{_pkgdocdir}/git-svn.html} %{?with_docs:%{_pkgdocdir}/git-svn.html}
%changelog %changelog
* Fri Jan 09 2026 Ondřej Pohořelský <opohorel@redhat.com> - 2.52.0-1
- update to 2.52.0
- Resolves: RHEL-118145, RHEL-111334
* Thu Jul 10 2025 Ondřej Pohořelský <opohorel@redhat.com> - 2.47.3-1 * Thu Jul 10 2025 Ondřej Pohořelský <opohorel@redhat.com> - 2.47.3-1
- update to 2.47.3 - update to 2.47.3
- Resolves: RHEL-102437, RHEL-102451, RHEL-102673, RHEL-102679 - Resolves: RHEL-102437, RHEL-102451, RHEL-102673, RHEL-102679

View File

@ -1,2 +1,2 @@
SHA512 (git-2.47.3.tar.sign) = 6d9b51346077a080bf581da2cb56ddc353aa8b58cdb5f34563681bdc90c513742812b2a6c8585f10472d220cd8be7448839d038f92167277aa131459977d9bcf SHA512 (git-2.52.0.tar.sign) = a5a68ce131a5763650c477ec01a4de958dd6a946bdea0f613e26bdab41d2df6b3ca63f9028bbe603bf0c834bd415c86e6c616b1ff08cc48aa7c3c61a37b24b74
SHA512 (git-2.47.3.tar.xz) = 9c0e1e42e3bc10eb912c1ca9737d55b2e5d994f56825fa659d6cf5cbec220c67cc9aa3217fc136ae28c90c0b4969cff3661dc92ed6e2774f7432170f1d9e2a55 SHA512 (git-2.52.0.tar.xz) = 965e5ebb72d1f080d64e34bdb75f0bb1689c9dd41dcf63b020d986bad49808ac09bfb1115962bc0c5b95bac8622367ac4cd09aa89266f73d2137fe94c90dd3ed