aboutsummaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2014-08-15 14:11:33 -0700
committerJunio C Hamano <gitster@pobox.com>2014-09-15 13:23:18 -0700
commit0e3c339bb69670b39161838de17f440480e1358a (patch)
tree5e63a8bc986db326a7a4274ed6d834fa2b41f47d /builtin
parent3bfcb95fa84d8bacb01a990c5bdb16df13462279 (diff)
downloadgit-0e3c339bb69670b39161838de17f440480e1358a.tar.gz
git-0e3c339bb69670b39161838de17f440480e1358a.tar.xz
receive-pack: parse feature request a bit earlier
Ideally, we should have also allowed the first "shallow" to carry the feature request trailer, but that is water under the bridge now. This makes the next step to factor out the queuing of commands easier to review. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/receive-pack.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index 1663bebaa..a91eec8b1 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -840,7 +840,7 @@ static struct command *read_head_info(struct sha1_array *shallow)
unsigned char old_sha1[20], new_sha1[20];
struct command *cmd;
char *refname;
- int len, reflen;
+ int len, reflen, linelen;
line = packet_read_line(0, &len);
if (!line)
@@ -853,7 +853,18 @@ static struct command *read_head_info(struct sha1_array *shallow)
continue;
}
- if (len < 83 ||
+ linelen = strlen(line);
+ if (linelen < len) {
+ const char *feature_list = line + linelen + 1;
+ if (parse_feature_request(feature_list, "report-status"))
+ report_status = 1;
+ if (parse_feature_request(feature_list, "side-band-64k"))
+ use_sideband = LARGE_PACKET_MAX;
+ if (parse_feature_request(feature_list, "quiet"))
+ quiet = 1;
+ }
+
+ if (linelen < 83 ||
line[40] != ' ' ||
line[81] != ' ' ||
get_sha1_hex(line, old_sha1) ||
@@ -862,16 +873,7 @@ static struct command *read_head_info(struct sha1_array *shallow)
line);
refname = line + 82;
- reflen = strlen(refname);
- if (reflen + 82 < len) {
- const char *feature_list = refname + reflen + 1;
- if (parse_feature_request(feature_list, "report-status"))
- report_status = 1;
- if (parse_feature_request(feature_list, "side-band-64k"))
- use_sideband = LARGE_PACKET_MAX;
- if (parse_feature_request(feature_list, "quiet"))
- quiet = 1;
- }
+ reflen = linelen - 82;
cmd = xcalloc(1, sizeof(struct command) + reflen + 1);
hashcpy(cmd->old_sha1, old_sha1);
hashcpy(cmd->new_sha1, new_sha1);