0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 12:20:24 +00:00

Fix closing of connection on response_body_too_small

This commit is contained in:
Loïc Hoguin 2019-09-16 11:34:51 +02:00
parent 8452df0617
commit d143235a79
No known key found for this signature in database
GPG key ID: 8A9DF795F6FED764
2 changed files with 10 additions and 6 deletions

View file

@ -1215,7 +1215,7 @@ stream_terminate(State0=#state{opts=Opts, in_streamid=InStreamID, in_state=InSta
info(State0, StreamID, {response, 204, #{}, <<>>});
chunked when Version =:= 'HTTP/1.1' ->
info(State0, StreamID, {data, fin, <<>>});
streaming when ExpectedSize < SentSize ->
streaming when SentSize < ExpectedSize ->
terminate(State0, response_body_too_small);
_ -> %% done or Version =:= 'HTTP/1.0'
State0

View file

@ -151,7 +151,6 @@ do_get_error(Path, Headers, Config) ->
nofin -> gun:await_body(ConnPid, Ref);
fin -> {ok, <<>>}
end,
gun:close(ConnPid),
case Result of
{ok, RespBody} -> {Status, RespHeaders, do_decode(RespHeaders, RespBody)};
_ -> Result
@ -953,16 +952,21 @@ stream_body_content_length_nofin(Config) ->
ok.
stream_body_content_length_nofin_error(Config) ->
doc("Not all of body sent."),
doc("Not all of the response body sent."),
case config(protocol, Config) of
http ->
case do_get_error("/resp/stream_body_content_length/nofin-error", Config) of
%% When compression is used content-length is not sent.
{200, Headers, <<"Hello">>} ->
{_, <<"gzip">>} = lists:keyfind(<<"content-encoding">>, 1, Headers);
%% The server closes the connection when the body couldn't be sent fully.
{error, {stream_error, closed}} ->
ok;
{error, timeout} ->
ok
receive
{gun_down, ConnPid, _, _, _, _} ->
gun:close(ConnPid)
after 1000 ->
error(timeout)
end
end;
http2 ->
%% @todo HTTP2 should have the same content-length checks