git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/2] bundle-uri: ignore bundles without uri

From
Toon Claes <toon@iotcl.com>
Date
Sep 12, 2025, 16:46 UTC
Message-ID
<20250912-b4-toon-bundle-uri-no-uri-v1-1-f4525a406df8@iotcl.com>
In-Reply-To
<20250912-b4-toon-bundle-uri-no-uri-v1-0-f4525a406df8@iotcl.com>

Bundle-URI can use the heuristic 'creationToken'. With this heuristic each bundle should specify a 'creationToken' next to the 'uri' attribute. But this allows misconfiguration where only a 'creationToken' and no 'uri' is specified for a bundle . Because Git expects each bundle to have a 'uri', this causes a segmentation fault.

Harden Git against bundles with missing 'uri' and skip bundles which miss this attribute.

Signed-off-by: Toon Claes <toon@iotcl.com>
---
 bundle-uri.c                |  3 +++
 t/t5558-clone-bundle-uri.sh | 24 ++++++++++++++++++++++++
 2 files changed, 27 insertions(+)
diff --git a/bundle-uri.c b/bundle-uri.c
index 57cccfc6b8..a1120508bf 100644
--- a/bundle-uri.c
+++ b/bundle-uri.c
@@ -745,6 +745,9 @@ static int fetch_bundle_uri_internal(struct repository *r,
 	int result = 0;
 	struct remote_bundle_info *bcopy;
 
+	if (!bundle->uri)
+		return -1;
+
 	if (depth >= max_bundle_uri_depth) {
 		warning(_("exceeded bundle URI recursion limit (%d)"),
 			max_bundle_uri_depth);
diff --git a/t/t5558-clone-bundle-uri.sh b/t/t5558-clone-bundle-uri.sh
index 7a0943bd36..3cf498b950 100755
--- a/t/t5558-clone-bundle-uri.sh
+++ b/t/t5558-clone-bundle-uri.sh
@@ -468,6 +468,30 @@ test_expect_success 'negotiation: bundle list with all wanted commits' '
 	test_grep ! "clone> want " trace-packet.txt
 '
 
+test_expect_success 'negotiation: bundle list with heuristic but uri missing' '
+	cat >bundle-list <<-EOF &&
+	[bundle]
+		version = 1
+		mode = all
+		heuristic = creationToken
+
+	[bundle "bundle-1"]
+		creationToken = 1
+	EOF
+
+	git clone --no-local --single-branch --branch=left --no-tags \
+		--bundle-uri="file://$(pwd)/bundle-list" \
+		clone-from nego-bundle-list-uri-missing &&
+
+	git -C nego-bundle-list-all for-each-ref --format="%(refname)" >refs &&
+	grep "refs/bundles/heads/" refs >actual &&
+	cat >expect <<-\EOF &&
+	refs/bundles/heads/base
+	refs/bundles/heads/left
+	EOF
+	test_cmp expect actual
+'
+
 #########################################################################
 # HTTP tests begin here
 
-- 
2.51.0
Previous: Toon ClaesNext: Justin Tobler
Message 2 of 10 in “Make git-clone(1) more resilient when using bundle-URI”
  1. 0/2 Make git-clone(1) more resilient when using bundle-URIToon Claes, Sep 12, 2025
  2. 1/2 bundle-uri: ignore bundles without uriToon Claes, Sep 12, 2025
  3. Justin ToblerSep 12, 2025
  4. Junio C HamanoSep 12, 2025
  5. Toon ClaesSep 16, 2025
  6. Junio C HamanoSep 16, 2025
  7. 2/2 bundle-uri: do not abort on invalid packet lineToon Claes, Sep 12, 2025
  8. Justin ToblerSep 12, 2025
  9. Toon ClaesSep 17, 2025
  10. Justin ToblerSep 17, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.