From dd6b35ff71a61c75af6f153fce14048c32d645cb Mon Sep 17 00:00:00 2001 From: Elijah Newren Date: Wed, 12 Aug 2026 06:39:43 +0000 Subject: [PATCH] serve: reject valueless promisor-remote capability d460267613da (Add 'promisor-remote' capability to protocol v2, 2025-02-18) added a receive callback which passes the capability value directly to mark_promisor_remotes_as_accepted(). However, a client can send the capability name without an '=' or value, in which case get_capability() supplies NULL and strbuf_split_str() dereferences it. Reject the missing argument before parsing it, and add a test covering this case. Signed-off-by: Elijah Newren Signed-off-by: Junio C Hamano --- serve.c | 3 +++ t/t5701-git-serve.sh | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/serve.c b/serve.c index 49a6e39b1d..29bed14af1 100644 --- a/serve.c +++ b/serve.c @@ -46,6 +46,9 @@ static int promisor_remote_advertise(struct repository *r, static void promisor_remote_receive(struct repository *r, const char *remotes) { + if (!remotes) + die("promisor-remote capability requires an argument"); + mark_promisor_remotes_as_accepted(r, remotes); } diff --git a/t/t5701-git-serve.sh b/t/t5701-git-serve.sh index d4c28bae39..f00e25d3e2 100755 --- a/t/t5701-git-serve.sh +++ b/t/t5701-git-serve.sh @@ -69,6 +69,17 @@ test_expect_success 'request invalid capability' ' test_grep "unknown capability" err ' +test_expect_success 'promisor-remote capability requires an argument' ' + test-tool pkt-line pack >in <<-EOF && + command=ls-refs + object-format=$(test_oid algo) + promisor-remote + 0000 + EOF + test_must_fail test-tool serve-v2 --stateless-rpc 2>err in <<-EOF && agent=git/test