Anonymous avatar Anonymous committed 41d96f5

honour ?MAX_RECV_BODY when receiving whole bodies.

Comments (0)

Files changed (1)

src/webmachine_request_srv.erl

 %%      Will only receive up to the default max-body length
 do_recv_body(State=#state{reqdata=RD}) ->
     State#state{reqdata=wrq:set_req_body(
-          read_whole_stream(do_stream_body(State, ?MAX_RECV_BODY), []), RD)}.
+          read_whole_stream(do_stream_body(State, ?MAX_RECV_BODY), [], ?MAX_RECV_BODY), RD)}.
 
-read_whole_stream({Hunk,Next}, Acc0) ->
+read_whole_stream({Hunk, _}, _, MaxRecv) when MaxRecv =< byte_size(Hunk) ->
+    exit(req_body_too_large);
+read_whole_stream({Hunk,Next}, Acc0, MaxRecv) ->
     Acc = [Hunk|Acc0],
     case Next of
         done -> iolist_to_binary(lists:reverse(Acc));
-        _ -> read_whole_stream(Next(), Acc)
+        _ -> read_whole_stream(Next(), Acc, MaxRecv - byte_size(Hunk))
     end.
 
 do_stream_body(State = #state{reqdata=RD}, MaxHunkSize) ->
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.