fix: Properly close malformed requests

main
Sean McBride 4 years ago
parent e430202c1f
commit c291b049c8

@ -11,6 +11,7 @@
#define HTTP_RESPONSE_200_OK "HTTP/1.1 200 OK\r\n" #define HTTP_RESPONSE_200_OK "HTTP/1.1 200 OK\r\n"
#define HTTP_RESPONSE_504_SERVICE_UNAVAILABLE "HTTP/1.1 504 Service Unavailable\r\n\r\n" #define HTTP_RESPONSE_504_SERVICE_UNAVAILABLE "HTTP/1.1 504 Service Unavailable\r\n\r\n"
#define HTTP_RESPONSE_400_BAD_REQUEST "HTTP/1.1 400 Bad Request\r\n\r\n"
#define HTTP_RESPONSE_CONTENT_LENGTH "Content-Length: " #define HTTP_RESPONSE_CONTENT_LENGTH "Content-Length: "
#define HTTP_RESPONSE_CONTENT_LENGTH_TERMINATOR "\r\n\r\n" /* content body follows this */ #define HTTP_RESPONSE_CONTENT_LENGTH_TERMINATOR "\r\n\r\n" /* content body follows this */
#define HTTP_RESPONSE_CONTENT_TYPE "Content-Type: " #define HTTP_RESPONSE_CONTENT_TYPE "Content-Type: "

@ -103,11 +103,11 @@ sandbox_receive_and_parse_client_request(struct sandbox *sandbox)
libuv_callbacks_on_allocate_setup_request_response_data, libuv_callbacks_on_allocate_setup_request_response_data,
libuv_callbacks_on_read_parse_http_request); libuv_callbacks_on_read_parse_http_request);
worker_thread_process_io(); worker_thread_process_io();
if (sandbox->request_response_data_length == 0) {
perror("request_response_data_length was unexpectedly 0");
return 0
};
#endif #endif
if (sandbox->request_response_data_length == 0) {
debuglog("request_response_data_length was unexpectedly 0");
return 0;
}
sandbox->request_length = sandbox->request_response_data_length; sandbox->request_length = sandbox->request_response_data_length;
return 1; return 1;
} }
@ -343,6 +343,9 @@ done:
err: err:
fprintf(stderr, "%s", error_message); fprintf(stderr, "%s", error_message);
assert(sandbox->state == SANDBOX_RUNNING); assert(sandbox->state == SANDBOX_RUNNING);
send(sandbox->client_socket_descriptor, HTTP_RESPONSE_400_BAD_REQUEST, strlen(HTTP_RESPONSE_400_BAD_REQUEST),
0);
software_interrupt_disable();
sandbox_set_as_error(sandbox, SANDBOX_RUNNING); sandbox_set_as_error(sandbox, SANDBOX_RUNNING);
goto done; goto done;
} }

Loading…
Cancel
Save