diff options
author | Loïc Hoguin <[email protected]> | 2018-01-22 14:00:05 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2018-01-22 14:00:05 +0100 |
commit | 3a7b411143db08cb4d8813d00988c07848738bd3 (patch) | |
tree | b30a00bb1b06d3f784e4be867a1b6e7f088ffb70 | |
parent | 82cd22a88b3f87064d9f17e36652b104b709a679 (diff) | |
download | cowboy-3a7b411143db08cb4d8813d00988c07848738bd3.tar.gz cowboy-3a7b411143db08cb4d8813d00988c07848738bd3.tar.bz2 cowboy-3a7b411143db08cb4d8813d00988c07848738bd3.zip |
Don't crash in delete_resp_header if no resp headers are set
-rw-r--r-- | src/cowboy_req.erl | 5 | ||||
-rw-r--r-- | test/handlers/resp_h.erl | 11 |
2 files changed, 11 insertions, 5 deletions
diff --git a/src/cowboy_req.erl b/src/cowboy_req.erl index 552f409..bae5e78 100644 --- a/src/cowboy_req.erl +++ b/src/cowboy_req.erl @@ -688,7 +688,10 @@ has_resp_body(_) -> -spec delete_resp_header(binary(), Req) -> Req when Req::req(). delete_resp_header(Name, Req=#{resp_headers := RespHeaders}) -> - Req#{resp_headers => maps:remove(Name, RespHeaders)}. + Req#{resp_headers => maps:remove(Name, RespHeaders)}; +%% There are no resp headers so we have nothing to delete. +delete_resp_header(Name, Req) -> + Req. -spec inform(cowboy:http_status(), req()) -> ok. inform(Status, Req) -> diff --git a/test/handlers/resp_h.erl b/test/handlers/resp_h.erl index ba46213..487a724 100644 --- a/test/handlers/resp_h.erl +++ b/test/handlers/resp_h.erl @@ -94,10 +94,13 @@ do(<<"has_resp_body">>, Req0, Opts) -> {ok, cowboy_req:reply(200, #{}, Req), Opts} end; do(<<"delete_resp_header">>, Req0, Opts) -> - false = cowboy_req:has_resp_header(<<"content-type">>, Req0), - Req1 = cowboy_req:set_resp_header(<<"content-type">>, <<"text/plain">>, Req0), - true = cowboy_req:has_resp_header(<<"content-type">>, Req1), - Req = cowboy_req:delete_resp_header(<<"content-type">>, Req1), + %% We try to delete first even though it hasn't been set to + %% make sure this noop is possible. + Req1 = cowboy_req:delete_resp_header(<<"content-type">>, Req0), + false = cowboy_req:has_resp_header(<<"content-type">>, Req1), + Req2 = cowboy_req:set_resp_header(<<"content-type">>, <<"text/plain">>, Req1), + true = cowboy_req:has_resp_header(<<"content-type">>, Req2), + Req = cowboy_req:delete_resp_header(<<"content-type">>, Req2), false = cowboy_req:has_resp_header(<<"content-type">>, Req), {ok, cowboy_req:reply(200, #{}, "OK", Req), Opts}; do(<<"inform2">>, Req0, Opts) -> |