fetch-pack: send server options after command
authorJonathan Tan <jonathantanmy@google.com>
Wed, 22 May 2019 20:08:22 +0000 (13:08 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 28 May 2019 18:01:07 +0000 (11:01 -0700)
Currently, if any server options are specified during a protocol v2
fetch, server options will be sent before "command=fetch". Write server
options to the request buffer in send_fetch_request() so that the
components of the request are sent in the correct order.

The protocol documentation states that the command must come first. The
Git server implementation in serve.c (see process_request() in that
file) tolerates any order of command and capability, which is perhaps
why we haven't noticed this. This was noticed when testing against a
JGit server implementation, which follows the documentation in this
regard.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Acked-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
fetch-pack.c
index 812be15d7e568522973227bb939343d94c008ceb..46651b16bca86928b317cffef1bc9cfa5e20007c 100644 (file)
@@ -1111,7 +1111,7 @@ static int send_fetch_request(struct fetch_negotiator *negotiator, int fd_out,
            server_supports_v2("server-option", 1)) {
                int i;
                for (i = 0; i < args->server_options->nr; i++)
-                       packet_write_fmt(fd_out, "server-option=%s",
+                       packet_buf_write(&req_buf, "server-option=%s",
                                         args->server_options->items[i].string);
        }