receive-pack: parse feature request a bit earlier
[gitweb.git] / builtin / receive-pack.c
index 1663bebaa27d869c04e8d7638de07cc443605d78..a91eec8b1c3e1dfd955d370c112a7bd2010243bd 100644 (file)
@@ -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);