Fix in http_receive_request
This commit is contained in:
		| @@ -68,6 +68,7 @@ int client_request_handler(sock *client, int req_num) { | |||||||
|     client_keep_alive = hdr_connection != NULL && strncmp(hdr_connection, "keep-alive", 10) == 0; |     client_keep_alive = hdr_connection != NULL && strncmp(hdr_connection, "keep-alive", 10) == 0; | ||||||
|     host = http_get_header_field(&req.hdr, "Host"); |     host = http_get_header_field(&req.hdr, "Host"); | ||||||
|     if (host == NULL) { |     if (host == NULL) { | ||||||
|  |         res.status = http_get_status(400); | ||||||
|         goto respond; |         goto respond; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -70,18 +70,15 @@ int http_receive_request(sock *client, http_req *req) { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         ptr = buf; |         ptr = buf; | ||||||
|         while (rcv_len - (ptr - buf) != 0) { |         while (rcv_len != (ptr - buf)) { | ||||||
|             pos0 = memchr(ptr, '\r', rcv_len - (ptr - buf)); |             pos0 = memchr(ptr, '\r', rcv_len - (ptr - buf)); | ||||||
|             if (pos0 == NULL || pos0[1] != '\n') { |             if (pos0 == NULL || pos0[1] != '\n') { | ||||||
|                 print(ERR_STR "Unable to parse header: Invalid header format" CLR_STR); |                 print(ERR_STR "Unable to parse header: Invalid header format" CLR_STR); | ||||||
|                 free(buf); |                 free(buf); | ||||||
|                 return -1; |                 return -1; | ||||||
|             } else if (pos0[2] == '\r' && pos0[3] == '\n') { |  | ||||||
|                 free(buf); |  | ||||||
|                 return 0; |  | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             if (ptr == buf) { |             if (req->version[0] == 0) { | ||||||
|                 if (memcmp(ptr, "GET ", 4) == 0) { |                 if (memcmp(ptr, "GET ", 4) == 0) { | ||||||
|                     sprintf(req->method, "GET"); |                     sprintf(req->method, "GET"); | ||||||
|                 } else if (memcmp(ptr, "HEAD ", 5) == 0) { |                 } else if (memcmp(ptr, "HEAD ", 5) == 0) { | ||||||
| @@ -147,7 +144,10 @@ int http_receive_request(sock *client, http_req *req) { | |||||||
|  |  | ||||||
|                 req->hdr.field_num++; |                 req->hdr.field_num++; | ||||||
|             } |             } | ||||||
|  |             if (pos0[2] == '\r' && pos0[3] == '\n') { | ||||||
|  |                 free(buf); | ||||||
|  |                 return 0; | ||||||
|  |             } | ||||||
|             ptr = pos0 + 2; |             ptr = pos0 + 2; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user