From 8fc3da2fc31a04281b0ba8dc0cdc1e1650067da5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Fri, 7 Feb 2020 11:32:15 +0100 Subject: Fix HTTP/1.1 bug when a flow command is returned after fin This resulted in a badarith error due to the current flow being set to infinity when the body has been fully read. A test case has been added reproducing the issue. --- src/cowboy_http.erl | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src') diff --git a/src/cowboy_http.erl b/src/cowboy_http.erl index 9f0b865..13d07b7 100644 --- a/src/cowboy_http.erl +++ b/src/cowboy_http.erl @@ -970,6 +970,9 @@ commands(State=#state{out_streamid=Current, streams=Streams0}, StreamID, Command Streams = lists:keyreplace(StreamID, #stream.id, Streams0, Stream#stream{queue=Queue ++ Commands}), State#state{streams=Streams}; +%% When we have finished reading the request body, do nothing. +commands(State=#state{flow=infinity}, StreamID, [{flow, _}|Tail]) -> + commands(State, StreamID, Tail); %% Read the request body. commands(State0=#state{flow=Flow0}, StreamID, [{flow, Size}|Tail]) -> %% We must read *at least* Size of data otherwise functions -- cgit v1.2.3