aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2018-01-22 14:00:05 +0100
committerLoïc Hoguin <[email protected]>2018-01-22 14:00:05 +0100
commit3a7b411143db08cb4d8813d00988c07848738bd3 (patch)
treeb30a00bb1b06d3f784e4be867a1b6e7f088ffb70
parent82cd22a88b3f87064d9f17e36652b104b709a679 (diff)
downloadcowboy-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.erl5
-rw-r--r--test/handlers/resp_h.erl11
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) ->