From 34786b2c9ea771cfd230d200fcaf04c1904a004e Mon Sep 17 00:00:00 2001 From: Cola Cheng Date: Fri, 12 Apr 2019 19:05:47 +0800 Subject: [PATCH] Only send the window_update when Size - RemoteWindow > 0 to prevent over 2^31-1 limit. --- src/cowboy_http2.erl | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/cowboy_http2.erl b/src/cowboy_http2.erl index d6f80e6f..2926efea 100644 --- a/src/cowboy_http2.erl +++ b/src/cowboy_http2.erl @@ -574,12 +574,18 @@ commands(State0=#state{socket=Socket, transport=Transport, http2_machine=HTTP2Ma commands(State, StreamID, Tail); commands(State=#state{socket=Socket, transport=Transport, http2_machine=HTTP2Machine0}, StreamID, [{flow, Size}|Tail]) -> - Transport:send(Socket, [ - cow_http2:window_update(Size), - cow_http2:window_update(StreamID, Size) - ]), - HTTP2Machine1 = cow_http2_machine:update_window(Size, HTTP2Machine0), - HTTP2Machine = cow_http2_machine:update_window(StreamID, Size, HTTP2Machine1), + RemoteWindow = cow_http2_machine:get_window(HTTP2Machine0), + HTTP2Machine = case Size - RemoteWindow of + Diff when Diff > 0 -> + Transport:send(Socket, [ + cow_http2:window_update(Diff), + cow_http2:window_update(StreamID, Diff) + ]), + HTTP2Machine1 = cow_http2_machine:update_window(Diff, HTTP2Machine0), + cow_http2_machine:update_window(StreamID, Diff, HTTP2Machine1); + _ -> + HTTP2Machine0 + end, commands(State#state{http2_machine=HTTP2Machine}, StreamID, Tail); %% Supervise a child process. commands(State=#state{children=Children}, StreamID, [{spawn, Pid, Shutdown}|Tail]) ->