ejabberd_http: Cope with large POST/PUT requests
authorHolger Weiss <holger@zedat.fu-berlin.de>
Sun, 20 Dec 2015 22:30:11 +0000 (23:30 +0100)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Sun, 20 Dec 2015 22:30:11 +0000 (23:30 +0100)
gen_tcp returns 'enomem' if we try to receive more than 64 MiB.

src/ejabberd_http.erl

index 6d54a7edaac213def0c6125e6d4cd6b94b90fcc6..920361017c1006008a9cedca46f665ee79d77a1d 100644 (file)
@@ -513,8 +513,8 @@ recv_data(#state{trail = Trail} = State, Len, <<>>) when byte_size(Trail) > Len
 recv_data(State, Len, Acc) ->
     case State#state.trail of
        <<>> ->
-           case (State#state.sockmod):recv(State#state.socket, Len,
-                                           300000)
+           case (State#state.sockmod):recv(State#state.socket,
+                                           min(Len, 16#4000000), 300000)
            of
                {ok, Data} ->
                    recv_data(State, Len - byte_size(Data), <<Acc/binary, Data/binary>>);