0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-16 13:10:24 +00:00

Reply with 400 on header parsing crash

This is a first step to improve the HTTP status codes returned
by Cowboy on crashes. We will tweak it over time.

Also fixes a small bug where two replies may have been sent
when using loop handlers under rare conditions.
This commit is contained in:
Loïc Hoguin 2014-07-12 12:09:43 +02:00
parent 20f598f373
commit 97a3108576
8 changed files with 55 additions and 26 deletions

View file

@ -0,0 +1,10 @@
%% This module crashes on request input data
%% depending on the given option.
-module(input_crash_h).
-export([init/3]).
init(_, Req, content_length) ->
cowboy_error_h:ignore(cow_http_hd, number, 2),
cowboy_req:parse_header(<<"content-length">>, Req).

View file

@ -193,6 +193,7 @@ init_dispatch(Config) ->
{"/multipart/large", http_multipart_stream, []},
{"/echo/body", http_echo_body, []},
{"/echo/body_qs", http_body_qs, []},
{"/crash/content-length", input_crash_h, content_length},
{"/param_all", rest_param_all, []},
{"/bad_accept", rest_simple_resource, []},
{"/bad_content_type", rest_patch_resource, []},
@ -274,6 +275,7 @@ The document has moved
{400, "GET / HTTP/1.1\r\nHost: ninenines.eu\r\n\r\n"},
{400, "GET http://proxy/ HTTP/1.1\r\n\r\n"},
{400, "GET / HTTP/1.1\r\nHost: localhost:bad_port\r\n\r\n"},
{400, ["POST /crash/content-length HTTP/1.1\r\nHost: localhost\r\nContent-Length: 5000,5000\r\n\r\n", Huge]},
{505, ResponsePacket},
{408, "GET / HTTP/1.1\r\n"},
{408, "GET / HTTP/1.1\r\nHost: localhost"},