@ -840,7 +840,7 @@ static struct command *read_head_info(struct sha1_array *shallow)
@@ -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)
@@ -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)
@@ -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);