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