Skip to content

Commit 436f7b2

Browse files
authored
Merge pull request #774 from viralpraxis/revert-body-parsing-optimization
Respect `TCP_MAX_PACKET_SIZE` while reading response body
2 parents 952753f + 9e48d50 commit 436f7b2

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

src/hackney_response.erl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323
close/1,
2424
expect_response/1]).
2525

26+
% The Erlang VM port forbids receiving TCP packets larger than 64MB
27+
% https://github.com/erlang/otp/blob/359e254aba76c1986b671b45fd320c6cc6720ca8/erts/emulator/drivers/common/inet_drv.c#L1297
28+
-define(MAX_PACKET_SIZE, 64 * 1024 * 1024).
29+
2630
%% internal
2731
%% @doc Start the response It parse the request lines and headers.
2832
start_response(#client{response_state=stream, mp_boundary=nil} = Client) ->
@@ -366,7 +370,7 @@ recv(#client{transport=Transport, socket=Skt, recv_timeout=Timeout}) ->
366370
recv(#client{transport=Transport, socket=Skt, recv_timeout=Timeout}, {_BufSize, undefined}) ->
367371
Transport:recv(Skt, 0, Timeout);
368372
recv(#client{transport=Transport, socket=Skt, recv_timeout=Timeout}, {BufSize, ExpectedSize}) when ExpectedSize >= BufSize ->
369-
Transport:recv(Skt, ExpectedSize - BufSize, Timeout);
373+
Transport:recv(Skt, min(ExpectedSize - BufSize, ?MAX_PACKET_SIZE), Timeout);
370374
recv(#client{transport=Transport, socket=Skt, recv_timeout=Timeout}, {_BufSize, _ExpectedSize}) ->
371375
Transport:recv(Skt, 0, Timeout).
372376

0 commit comments

Comments
 (0)