aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_req.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/cowboy_req.erl')
-rw-r--r--src/cowboy_req.erl13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/cowboy_req.erl b/src/cowboy_req.erl
index 02089c2..86f06ec 100644
--- a/src/cowboy_req.erl
+++ b/src/cowboy_req.erl
@@ -1036,15 +1036,22 @@ continue(#http_req{socket=Socket, transport=Transport,
<< HTTPVer/binary, " ", (status(100))/binary, "\r\n\r\n" >>).
%% Meant to be used internally for sending errors after crashes.
--spec maybe_reply(cowboy:http_status(), req()) -> ok.
-maybe_reply(Status, Req) ->
+-spec maybe_reply([{module(), atom(), arity() | [term()], _}], req()) -> ok.
+maybe_reply(Stacktrace, Req) ->
receive
{cowboy_req, resp_sent} -> ok
after 0 ->
- _ = cowboy_req:reply(Status, Req),
+ _ = do_maybe_reply(Stacktrace, Req),
ok
end.
+do_maybe_reply([
+ {cow_http_hd, _, _, _},
+ {cowboy_req, parse_header, _, _}|_], Req) ->
+ cowboy_req:reply(400, Req);
+do_maybe_reply(_, Req) ->
+ cowboy_req:reply(500, Req).
+
-spec ensure_response(req(), cowboy:http_status()) -> ok.
%% The response has already been fully sent to the client.
ensure_response(#http_req{resp_state=done}, _) ->