Skip to content

Commit 179776f

Browse files
peffgitster
authored andcommitted
upload-pack: accept only a single packfile-uri line
When we see a packfile-uri line from the client, we use string_list_split() to split it on commas and store the result in a string_list. A single packfile-uri line is therefore limited to storing ~64kb, the size of a pkt-line. But we'll happily accept multiple such lines, and each line appends to the string list, growing without bound. In theory this could be useful, making: 0017packfile-uris http 0018packfile-uris https equivalent to: 001dpackfile-uris http,https But the protocol documentation doesn't indicate that this should work (and indeed, refers to this in the singular as "the following argument can be included in the client's request"). And the client-side implementation in fetch-pack has always sent a single line (JGit appears to understand the line on the server side but has no client-side implementation, and libgit2 understands neither). If we were worried about compatibility, we could instead just put a limit on the maximum number of values we'd accept. The current client implementation limits itself to only two values: "http" and "https", so something like "256" would be more than enough. But accepting only a single line seems more in line with the protocol documentation, and matches other parts of the protocol (e.g., we will not accept a second "filter" line). We'll also make this more explicit in the protocol documentation; as above, I think this was always the intent, but there's no harm in making it clear. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent b065063 commit 179776f

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

Documentation/gitprotocol-v2.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,8 @@ included in the client's request:
362362
If the 'packfile-uris' feature is advertised, the following argument
363363
can be included in the client's request as well as the potential
364364
addition of the 'packfile-uris' section in the server's response as
365-
explained below.
365+
explained below. Note that at most one `packfile-uris` line can be sent
366+
to the server.
366367

367368
packfile-uris <comma-separated-list-of-protocols>
368369
Indicates to the server that the client is willing to receive

upload-pack.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1646,6 +1646,9 @@ static void process_args(struct packet_reader *request,
16461646
}
16471647

16481648
if (skip_prefix(arg, "packfile-uris ", &p)) {
1649+
if (data->uri_protocols.nr)
1650+
send_err_and_die(data,
1651+
"multiple packfile-uris lines forbidden");
16491652
string_list_split(&data->uri_protocols, p, ',', -1);
16501653
continue;
16511654
}

0 commit comments

Comments
 (0)