Control: tags 1093042 + patch
Control: tags 1093042 + pending

Dear Jonathan,

I've prepared an NMU for git (versioned as 1:2.47.2-0.1) and
uploaded it to DELAYED/2. Please feel free to tell me if I
should delay it longer.

I'm not sure if you have concerns about the short delay but I
defintively strongly would prefer to have the update first exposed in
unstable, then go down to bookworm releasing the packages. 

What I tried is to follow as close as possible your current pckaging
from a git clone merge the upstream v2.47.2 tag for the unstable
upload as this is a supported version. 

Differently though for bookworm and cherry-picking there the commits
from the closest down version.

Regards.
Salvatore
diff -Nru git-2.47.1/Documentation/RelNotes/2.40.4.txt git-2.47.2/Documentation/RelNotes/2.40.4.txt
--- git-2.47.1/Documentation/RelNotes/2.40.4.txt	1970-01-01 01:00:00.000000000 +0100
+++ git-2.47.2/Documentation/RelNotes/2.40.4.txt	2025-01-13 23:17:08.000000000 +0100
@@ -0,0 +1,5 @@
+Git v2.40.4 Release Notes
+=========================
+
+This release lets Git refuse to accept URLs that contain control
+sequences.  This addresses CVE-2024-50349 and CVE-2024-52006.
diff -Nru git-2.47.1/Documentation/RelNotes/2.41.3.txt git-2.47.2/Documentation/RelNotes/2.41.3.txt
--- git-2.47.1/Documentation/RelNotes/2.41.3.txt	1970-01-01 01:00:00.000000000 +0100
+++ git-2.47.2/Documentation/RelNotes/2.41.3.txt	2025-01-13 23:17:08.000000000 +0100
@@ -0,0 +1,6 @@
+Git v2.41.3 Release Notes
+=========================
+
+This release merges up the fix that appears in v2.40.4 to address
+the security issues CVE-2024-50349 and CVE-2024-52006; see the
+release notes for that version for details.
diff -Nru git-2.47.1/Documentation/RelNotes/2.42.4.txt git-2.47.2/Documentation/RelNotes/2.42.4.txt
--- git-2.47.1/Documentation/RelNotes/2.42.4.txt	1970-01-01 01:00:00.000000000 +0100
+++ git-2.47.2/Documentation/RelNotes/2.42.4.txt	2025-01-13 23:17:08.000000000 +0100
@@ -0,0 +1,6 @@
+Git v2.42.4 Release Notes
+=========================
+
+This release merges up the fix that appears in v2.40.4 and v2.41.3
+to address the security issues CVE-2024-50349 and CVE-2024-52006;
+see the release notes for these versions for details.
diff -Nru git-2.47.1/Documentation/RelNotes/2.43.6.txt git-2.47.2/Documentation/RelNotes/2.43.6.txt
--- git-2.47.1/Documentation/RelNotes/2.43.6.txt	1970-01-01 01:00:00.000000000 +0100
+++ git-2.47.2/Documentation/RelNotes/2.43.6.txt	2025-01-13 23:17:08.000000000 +0100
@@ -0,0 +1,7 @@
+Git v2.43.6 Release Notes
+=========================
+
+This release merges up the fix that appears in v2.40.4, v2.41.3
+and v2.42.4 to address the security issues CVE-2024-50349 and
+CVE-2024-52006; see the release notes for these versions for
+details.
diff -Nru git-2.47.1/Documentation/RelNotes/2.44.3.txt git-2.47.2/Documentation/RelNotes/2.44.3.txt
--- git-2.47.1/Documentation/RelNotes/2.44.3.txt	1970-01-01 01:00:00.000000000 +0100
+++ git-2.47.2/Documentation/RelNotes/2.44.3.txt	2025-01-13 23:17:08.000000000 +0100
@@ -0,0 +1,7 @@
+Git v2.44.3 Release Notes
+=========================
+
+This release merges up the fix that appears in v2.40.4, v2.41.3,
+v2.42.4 and v2.43.6 to address the security issues CVE-2024-50349
+and CVE-2024-52006; see the release notes for these versions
+for details.
diff -Nru git-2.47.1/Documentation/RelNotes/2.45.3.txt git-2.47.2/Documentation/RelNotes/2.45.3.txt
--- git-2.47.1/Documentation/RelNotes/2.45.3.txt	2024-11-25 06:39:52.000000000 +0100
+++ git-2.47.2/Documentation/RelNotes/2.45.3.txt	2025-01-13 23:17:08.000000000 +0100
@@ -1,7 +1,12 @@
 Git v2.45.3 Release Notes
 =========================
 
-This primarily is to backport various small fixes accumulated on the
+This release merges up the fix that appears in v2.40.4, v2.41.3,
+v2.42.4, v2.43.6 and v2.44.3 to address the security issues
+CVE-2024-50349 and CVE-2024-52006; see the release notes for
+these versions for details.
+
+This version also backports various small fixes accumulated on the
 'master' front during the development towards Git 2.46, the next
 feature release.
 
diff -Nru git-2.47.1/Documentation/RelNotes/2.46.3.txt git-2.47.2/Documentation/RelNotes/2.46.3.txt
--- git-2.47.1/Documentation/RelNotes/2.46.3.txt	1970-01-01 01:00:00.000000000 +0100
+++ git-2.47.2/Documentation/RelNotes/2.46.3.txt	2025-01-13 23:17:08.000000000 +0100
@@ -0,0 +1,6 @@
+Git v2.46.3 Release Notes
+=========================
+
+This release merges up the fix that appears in v2.40.4, v2.41.3, v2.42.4,
+v2.43.6, v2.44.3 and v2.45.3 to address the security issues CVE-2024-50349 and
+CVE-2024-52006; see the release notes for these versions for details.
diff -Nru git-2.47.1/Documentation/RelNotes/2.47.2.txt git-2.47.2/Documentation/RelNotes/2.47.2.txt
--- git-2.47.1/Documentation/RelNotes/2.47.2.txt	1970-01-01 01:00:00.000000000 +0100
+++ git-2.47.2/Documentation/RelNotes/2.47.2.txt	2025-01-13 23:17:08.000000000 +0100
@@ -0,0 +1,7 @@
+Git v2.47.2 Release Notes
+=========================
+
+This release merges up the fix that appears in v2.40.4, v2.41.3,
+v2.42.4, v2.43.6, v2.44.3, v2.45.3 and v2.46.3 to address the
+security issues CVE-2024-50349 and CVE-2024-52006; see the release
+notes for these versions for details.
diff -Nru git-2.47.1/Documentation/config/credential.txt git-2.47.2/Documentation/config/credential.txt
--- git-2.47.1/Documentation/config/credential.txt	2024-11-25 06:39:52.000000000 +0100
+++ git-2.47.2/Documentation/config/credential.txt	2025-01-13 23:17:08.000000000 +0100
@@ -22,6 +22,17 @@
 	or https URL to be important. Defaults to false. See
 	linkgit:gitcredentials[7] for more information.
 
+credential.sanitizePrompt::
+	By default, user names and hosts that are shown as part of the
+	password prompt are not allowed to contain control characters (they
+	will be URL-encoded by default). Configure this setting to `false` to
+	override that behavior.
+
+credential.protectProtocol::
+	By default, Carriage Return characters are not allowed in the protocol
+	that is used when Git talks to a credential helper. This setting allows
+	users to override this default.
+
 credential.username::
 	If no username is set for a network authentication, use this username
 	by default. See credential.<context>.* below, and
diff -Nru git-2.47.1/configure git-2.47.2/configure
--- git-2.47.1/configure	2024-11-25 06:39:52.000000000 +0100
+++ git-2.47.2/configure	2025-01-13 23:17:08.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for git 2.47.1.
+# Generated by GNU Autoconf 2.71 for git 2.47.2.
 #
 # Report bugs to <g...@vger.kernel.org>.
 #
@@ -611,8 +611,8 @@
 # Identity of this package.
 PACKAGE_NAME='git'
 PACKAGE_TARNAME='git'
-PACKAGE_VERSION='2.47.1'
-PACKAGE_STRING='git 2.47.1'
+PACKAGE_VERSION='2.47.2'
+PACKAGE_STRING='git 2.47.2'
 PACKAGE_BUGREPORT='g...@vger.kernel.org'
 PACKAGE_URL=''
 
@@ -1290,7 +1290,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures git 2.47.1 to adapt to many kinds of systems.
+\`configure' configures git 2.47.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1352,7 +1352,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of git 2.47.1:";;
+     short | recursive ) echo "Configuration of git 2.47.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1495,7 +1495,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-git configure 2.47.1
+git configure 2.47.2
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1911,7 +1911,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by git $as_me 2.47.1, which was
+It was created by git $as_me 2.47.2, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -8892,7 +8892,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by git $as_me 2.47.1, which was
+This file was extended by git $as_me 2.47.2, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -8951,7 +8951,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-git config.status 2.47.1
+git config.status 2.47.2
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
diff -Nru git-2.47.1/credential.c git-2.47.2/credential.c
--- git-2.47.1/credential.c	2024-11-25 06:39:52.000000000 +0100
+++ git-2.47.2/credential.c	2025-01-13 23:17:08.000000000 +0100
@@ -12,7 +12,7 @@
 #include "sigchain.h"
 #include "strbuf.h"
 #include "urlmatch.h"
-#include "git-compat-util.h"
+#include "environment.h"
 #include "trace2.h"
 #include "repository.h"
 
@@ -129,6 +129,10 @@
 	}
 	else if (!strcmp(key, "usehttppath"))
 		c->use_http_path = git_config_bool(var, value);
+	else if (!strcmp(key, "sanitizeprompt"))
+		c->sanitize_prompt = git_config_bool(var, value);
+	else if (!strcmp(key, "protectprotocol"))
+		c->protect_protocol = git_config_bool(var, value);
 
 	return 0;
 }
@@ -226,7 +230,8 @@
 		strbuf_addch(out, '@');
 	}
 	if (c->host)
-		strbuf_addstr(out, c->host);
+		strbuf_add_percentencode(out, c->host,
+					 STRBUF_ENCODE_HOST_AND_PORT);
 	if (c->path) {
 		strbuf_addch(out, '/');
 		strbuf_add_percentencode(out, c->path, 0);
@@ -240,7 +245,10 @@
 	struct strbuf prompt = STRBUF_INIT;
 	char *r;
 
-	credential_describe(c, &desc);
+	if (c->sanitize_prompt)
+		credential_format(c, &desc);
+	else
+		credential_describe(c, &desc);
 	if (desc.len)
 		strbuf_addf(&prompt, "%s for '%s': ", what, desc.buf);
 	else
@@ -381,7 +389,8 @@
 	return 0;
 }
 
-static void credential_write_item(FILE *fp, const char *key, const char *value,
+static void credential_write_item(const struct credential *c,
+				  FILE *fp, const char *key, const char *value,
 				  int required)
 {
 	if (!value && required)
@@ -390,6 +399,10 @@
 		return;
 	if (strchr(value, '\n'))
 		die("credential value for %s contains newline", key);
+	if (c->protect_protocol && strchr(value, '\r'))
+		die("credential value for %s contains carriage return\n"
+		    "If this is intended, set `credential.protectProtocol=false`",
+		    key);
 	fprintf(fp, "%s=%s\n", key, value);
 }
 
@@ -397,34 +410,34 @@
 		      enum credential_op_type op_type)
 {
 	if (credential_has_capability(&c->capa_authtype, op_type))
-		credential_write_item(fp, "capability[]", "authtype", 0);
+		credential_write_item(c, fp, "capability[]", "authtype", 0);
 	if (credential_has_capability(&c->capa_state, op_type))
-		credential_write_item(fp, "capability[]", "state", 0);
+		credential_write_item(c, fp, "capability[]", "state", 0);
 
 	if (credential_has_capability(&c->capa_authtype, op_type)) {
-		credential_write_item(fp, "authtype", c->authtype, 0);
-		credential_write_item(fp, "credential", c->credential, 0);
+		credential_write_item(c, fp, "authtype", c->authtype, 0);
+		credential_write_item(c, fp, "credential", c->credential, 0);
 		if (c->ephemeral)
-			credential_write_item(fp, "ephemeral", "1", 0);
+			credential_write_item(c, fp, "ephemeral", "1", 0);
 	}
-	credential_write_item(fp, "protocol", c->protocol, 1);
-	credential_write_item(fp, "host", c->host, 1);
-	credential_write_item(fp, "path", c->path, 0);
-	credential_write_item(fp, "username", c->username, 0);
-	credential_write_item(fp, "password", c->password, 0);
-	credential_write_item(fp, "oauth_refresh_token", c->oauth_refresh_token, 0);
+	credential_write_item(c, fp, "protocol", c->protocol, 1);
+	credential_write_item(c, fp, "host", c->host, 1);
+	credential_write_item(c, fp, "path", c->path, 0);
+	credential_write_item(c, fp, "username", c->username, 0);
+	credential_write_item(c, fp, "password", c->password, 0);
+	credential_write_item(c, fp, "oauth_refresh_token", c->oauth_refresh_token, 0);
 	if (c->password_expiry_utc != TIME_MAX) {
 		char *s = xstrfmt("%"PRItime, c->password_expiry_utc);
-		credential_write_item(fp, "password_expiry_utc", s, 0);
+		credential_write_item(c, fp, "password_expiry_utc", s, 0);
 		free(s);
 	}
 	for (size_t i = 0; i < c->wwwauth_headers.nr; i++)
-		credential_write_item(fp, "wwwauth[]", c->wwwauth_headers.v[i], 0);
+		credential_write_item(c, fp, "wwwauth[]", c->wwwauth_headers.v[i], 0);
 	if (credential_has_capability(&c->capa_state, op_type)) {
 		if (c->multistage)
-			credential_write_item(fp, "continue", "1", 0);
+			credential_write_item(c, fp, "continue", "1", 0);
 		for (size_t i = 0; i < c->state_headers_to_send.nr; i++)
-			credential_write_item(fp, "state[]", c->state_headers_to_send.v[i], 0);
+			credential_write_item(c, fp, "state[]", c->state_headers_to_send.v[i], 0);
 	}
 }
 
diff -Nru git-2.47.1/credential.h git-2.47.2/credential.h
--- git-2.47.1/credential.h	2024-11-25 06:39:52.000000000 +0100
+++ git-2.47.2/credential.h	2025-01-13 23:17:08.000000000 +0100
@@ -168,7 +168,9 @@
 		 multistage: 1,
 		 quit:1,
 		 use_http_path:1,
-		 username_from_proto:1;
+		 username_from_proto:1,
+		 sanitize_prompt:1,
+		 protect_protocol:1;
 
 	struct credential_capability capa_authtype;
 	struct credential_capability capa_state;
@@ -195,6 +197,8 @@
 	.wwwauth_headers = STRVEC_INIT, \
 	.state_headers = STRVEC_INIT, \
 	.state_headers_to_send = STRVEC_INIT, \
+	.sanitize_prompt = 1, \
+	.protect_protocol = 1, \
 }
 
 /* Initialize a credential structure, setting all fields to empty. */
diff -Nru git-2.47.1/debian/changelog git-2.47.2/debian/changelog
--- git-2.47.1/debian/changelog	2025-01-02 13:12:25.000000000 +0100
+++ git-2.47.2/debian/changelog	2025-01-19 09:06:17.000000000 +0100
@@ -1,3 +1,11 @@
+git (1:2.47.2-0.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * new upstream release (see Documentation/RelNotes/2.47.2.txt; addresses
+    CVE-2024-50349 and CVE-2024-52006; Closes: #1093042).
+
+ -- Salvatore Bonaccorso <car...@debian.org>  Sun, 19 Jan 2025 09:06:17 +0100
+
 git (1:2.47.1-1) unstable; urgency=low
 
   * new upstream release (see RelNotes/2.46.0.txt, RelNotes/2.47.0.txt).
diff -Nru git-2.47.1/strbuf.c git-2.47.2/strbuf.c
--- git-2.47.1/strbuf.c	2024-11-25 06:39:52.000000000 +0100
+++ git-2.47.2/strbuf.c	2025-01-13 23:17:08.000000000 +0100
@@ -495,7 +495,9 @@
 		unsigned char ch = src[i];
 		if (ch <= 0x1F || ch >= 0x7F ||
 		    (ch == '/' && (flags & STRBUF_ENCODE_SLASH)) ||
-		    strchr(URL_UNSAFE_CHARS, ch))
+		    ((flags & STRBUF_ENCODE_HOST_AND_PORT) ?
+		     !isalnum(ch) && !strchr("-.:[]", ch) :
+		     !!strchr(URL_UNSAFE_CHARS, ch)))
 			strbuf_addf(dst, "%%%02X", (unsigned char)ch);
 		else
 			strbuf_addch(dst, ch);
diff -Nru git-2.47.1/strbuf.h git-2.47.2/strbuf.h
--- git-2.47.1/strbuf.h	2024-11-25 06:39:52.000000000 +0100
+++ git-2.47.2/strbuf.h	2025-01-13 23:17:08.000000000 +0100
@@ -356,6 +356,7 @@
 void strbuf_addbuf_percentquote(struct strbuf *dst, const struct strbuf *src);
 
 #define STRBUF_ENCODE_SLASH 1
+#define STRBUF_ENCODE_HOST_AND_PORT 2
 
 /**
  * Append the contents of a string to a strbuf, percent-encoding any characters
diff -Nru git-2.47.1/t/t0300-credentials.sh git-2.47.2/t/t0300-credentials.sh
--- git-2.47.1/t/t0300-credentials.sh	2024-11-25 06:39:52.000000000 +0100
+++ git-2.47.2/t/t0300-credentials.sh	2025-01-13 23:17:08.000000000 +0100
@@ -77,6 +77,10 @@
 	test -z "$pexpiry" || echo password_expiry_utc=$pexpiry
 	EOF
 
+	write_script git-credential-cntrl-in-username <<-\EOF &&
+	printf "username=\\007latrix Lestrange\\n"
+	EOF
+
 	PATH="$PWD:$PATH"
 '
 
@@ -697,6 +701,19 @@
 	EOF
 '
 
+test_expect_success 'match percent-encoded values in hostname' '
+	test_config "credential.https://a%20b%20c/.helper"; "$HELPER" &&
+	check fill <<-\EOF
+	url=https://a b c/
+	--
+	protocol=https
+	host=a b c
+	username=foo
+	password=bar
+	--
+	EOF
+'
+
 test_expect_success 'fetch with multiple path components' '
 	test_unconfig credential.helper &&
 	test_config credential.https://example.com/foo/repo.git.helper "verbatim foo bar" &&
@@ -886,6 +903,22 @@
 	test_cmp expect stderr
 '
 
+test_expect_success 'url parser rejects embedded carriage returns' '
+	test_config credential.helper "!true" &&
+	test_must_fail git credential fill 2>stderr <<-\EOF &&
+	url=https://example%0d.com/
+	EOF
+	cat >expect <<-\EOF &&
+	fatal: credential value for host contains carriage return
+	If this is intended, set `credential.protectProtocol=false`
+	EOF
+	test_cmp expect stderr &&
+	GIT_ASKPASS=true \
+	git -c credential.protectProtocol=false credential fill <<-\EOF
+	url=https://example%0d.com/
+	EOF
+'
+
 test_expect_success 'host-less URLs are parsed as empty host' '
 	check fill "verbatim foo bar" <<-\EOF
 	url=cert:///path/to/cert.pem
@@ -995,4 +1028,20 @@
 	test_grep "skipping credential lookup for key" stderr
 '
 
+BEL="$(printf '\007')"
+
+test_expect_success 'interactive prompt is sanitized' '
+	check fill cntrl-in-username <<-EOF
+	protocol=https
+	host=example.org
+	--
+	protocol=https
+	host=example.org
+	username=${BEL}latrix Lestrange
+	password=askpass-password
+	--
+	askpass: Password for ${SQ}https://%07latrix%20lestra...@example.org${SQ}:
+	EOF
+'
+
 test_done
diff -Nru git-2.47.1/t/t5541-http-push-smart.sh git-2.47.2/t/t5541-http-push-smart.sh
--- git-2.47.1/t/t5541-http-push-smart.sh	2024-11-25 06:39:52.000000000 +0100
+++ git-2.47.2/t/t5541-http-push-smart.sh	2025-01-13 23:17:08.000000000 +0100
@@ -344,7 +344,7 @@
 	git push "$HTTPD_URL"/auth/smart/test_repo.git &&
 	git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git" \
 		log -1 --format=%s >actual &&
-	expect_askpass both user@host &&
+	expect_askpass both user%40host &&
 	test_cmp expect actual
 '
 
@@ -356,7 +356,7 @@
 	git push "$HTTPD_URL"/auth-push/smart/test_repo.git &&
 	git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git" \
 		log -1 --format=%s >actual &&
-	expect_askpass both user@host &&
+	expect_askpass both user%40host &&
 	test_cmp expect actual
 '
 
@@ -386,7 +386,7 @@
 	git push "$HTTPD_URL/half-auth-complete/smart/half-auth.git" &&
 	git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/half-auth.git" \
 		log -1 --format=%s >actual &&
-	expect_askpass both user@host &&
+	expect_askpass both user%40host &&
 	test_cmp expect actual
 '
 
diff -Nru git-2.47.1/t/t5550-http-fetch-dumb.sh git-2.47.2/t/t5550-http-fetch-dumb.sh
--- git-2.47.1/t/t5550-http-fetch-dumb.sh	2024-11-25 06:39:52.000000000 +0100
+++ git-2.47.2/t/t5550-http-fetch-dumb.sh	2025-01-13 23:17:08.000000000 +0100
@@ -112,13 +112,13 @@
 test_expect_success 'http auth can use just user in URL' '
 	set_askpass wrong pass@host &&
 	git clone "$HTTPD_URL_USER/auth/dumb/repo.git" clone-auth-pass &&
-	expect_askpass pass user@host
+	expect_askpass pass user%40host
 '
 
 test_expect_success 'http auth can request both user and pass' '
 	set_askpass user@host pass@host &&
 	git clone "$HTTPD_URL/auth/dumb/repo.git" clone-auth-both &&
-	expect_askpass both user@host
+	expect_askpass both user%40host
 '
 
 test_expect_success 'http auth respects credential helper config' '
@@ -136,14 +136,14 @@
 	test_config_global "credential.$HTTPD_URL.username" user@host &&
 	set_askpass wrong pass@host &&
 	git clone "$HTTPD_URL/auth/dumb/repo.git" clone-auth-user &&
-	expect_askpass pass user@host
+	expect_askpass pass user%40host
 '
 
 test_expect_success 'configured username does not override URL' '
 	test_config_global "credential.$HTTPD_URL.username" wrong &&
 	set_askpass wrong pass@host &&
 	git clone "$HTTPD_URL_USER/auth/dumb/repo.git" clone-auth-user2 &&
-	expect_askpass pass user@host
+	expect_askpass pass user%40host
 '
 
 test_expect_success 'set up repo with http submodules' '
@@ -164,7 +164,7 @@
 	set_askpass wrong pass@host &&
 	git -c "credential.$HTTPD_URL.username=user@host" \
 		clone --recursive super super-clone &&
-	expect_askpass pass user@host
+	expect_askpass pass user%40host
 '
 
 test_expect_success 'cmdline credential config passes submodule via fetch' '
@@ -175,7 +175,7 @@
 	git -C super-clone \
 	    -c "credential.$HTTPD_URL.username=user@host" \
 	    fetch --recurse-submodules &&
-	expect_askpass pass user@host
+	expect_askpass pass user%40host
 '
 
 test_expect_success 'cmdline credential config passes submodule update' '
@@ -192,7 +192,7 @@
 	git -C super-clone \
 	    -c "credential.$HTTPD_URL.username=user@host" \
 	    submodule update &&
-	expect_askpass pass user@host
+	expect_askpass pass user%40host
 '
 
 test_expect_success 'fetch changes via http' '
diff -Nru git-2.47.1/t/t5551-http-fetch-smart.sh git-2.47.2/t/t5551-http-fetch-smart.sh
--- git-2.47.1/t/t5551-http-fetch-smart.sh	2024-11-25 06:39:52.000000000 +0100
+++ git-2.47.2/t/t5551-http-fetch-smart.sh	2025-01-13 23:17:08.000000000 +0100
@@ -182,7 +182,7 @@
 	echo two >expect &&
 	set_askpass user@host pass@host &&
 	git clone --bare "$HTTPD_URL/auth/smart/repo.git" smart-auth &&
-	expect_askpass both user@host &&
+	expect_askpass both user%40host &&
 	git --git-dir=smart-auth log -1 --format=%s >actual &&
 	test_cmp expect actual
 '
@@ -222,7 +222,7 @@
 	echo two >expect &&
 	set_askpass user@host pass@host &&
 	git clone --bare "$HTTPD_URL/auth-fetch/smart/repo.git" half-auth &&
-	expect_askpass both user@host &&
+	expect_askpass both user%40host &&
 	git --git-dir=half-auth log -1 --format=%s >actual &&
 	test_cmp expect actual
 '
@@ -247,14 +247,14 @@
 	set_askpass user@host pass@host &&
 	git -c credential.useHttpPath=true \
 	  clone $HTTPD_URL/smart-redir-auth/repo.git repo-redir-auth &&
-	expect_askpass both user@host auth/smart/repo.git
+	expect_askpass both user%40host auth/smart/repo.git
 '
 
 test_expect_success 'GIT_TRACE_CURL redacts auth details' '
 	rm -rf redact-auth trace &&
 	set_askpass user@host pass@host &&
 	GIT_TRACE_CURL="$(pwd)/trace" git clone --bare "$HTTPD_URL/auth/smart/repo.git" redact-auth &&
-	expect_askpass both user@host &&
+	expect_askpass both user%40host &&
 
 	# Ensure that there is no "Basic" followed by a base64 string, but that
 	# the auth details are redacted
@@ -266,7 +266,7 @@
 	rm -rf redact-auth trace &&
 	set_askpass user@host pass@host &&
 	GIT_CURL_VERBOSE=1 git clone --bare "$HTTPD_URL/auth/smart/repo.git" redact-auth 2>trace &&
-	expect_askpass both user@host &&
+	expect_askpass both user%40host &&
 
 	# Ensure that there is no "Basic" followed by a base64 string, but that
 	# the auth details are redacted
@@ -279,7 +279,7 @@
 	set_askpass user@host pass@host &&
 	GIT_TRACE_REDACT=0 GIT_TRACE_CURL="$(pwd)/trace" \
 		git clone --bare "$HTTPD_URL/auth/smart/repo.git" redact-auth &&
-	expect_askpass both user@host &&
+	expect_askpass both user%40host &&
 
 	grep -i "Authorization: Basic [0-9a-zA-Z+/]" trace
 '
@@ -593,7 +593,7 @@
 	# the first request prompts the user...
 	set_askpass user@host pass@host &&
 	git ls-remote "$HTTPD_URL/auth/smart/repo.git" >/dev/null &&
-	expect_askpass both user@host &&
+	expect_askpass both user%40host &&
 
 	# ...and the second one uses the stored value rather than
 	# prompting the user.
@@ -624,7 +624,7 @@
 	# us to prompt the user again.
 	set_askpass user@host pass@host &&
 	git ls-remote "$HTTPD_URL/auth/smart/repo.git" >/dev/null &&
-	expect_askpass both user@host
+	expect_askpass both user%40host
 '
 
 test_expect_success 'client falls back from v2 to v0 to match server' '
diff -Nru git-2.47.1/t/t7300-clean.sh git-2.47.2/t/t7300-clean.sh
--- git-2.47.1/t/t7300-clean.sh	2024-11-25 06:39:52.000000000 +0100
+++ git-2.47.2/t/t7300-clean.sh	2025-01-13 23:17:08.000000000 +0100
@@ -747,7 +747,7 @@
 	test_must_fail git clean -xdf 2>.git/err &&
 	# grepping for a strerror string is unportable but it is OK here with
 	# MINGW prereq
-	test_grep "too long" .git/err
+	test_grep -e "too long" -e "No such file or directory" .git/err
 '
 
 test_expect_success 'clean untracked paths by pathspec' '
diff -Nru git-2.47.1/version git-2.47.2/version
--- git-2.47.1/version	2024-11-25 06:39:52.000000000 +0100
+++ git-2.47.2/version	2025-01-13 23:17:08.000000000 +0100
@@ -1 +1 @@
-2.47.1
+2.47.2

Reply via email to