From 3a7b411143db08cb4d8813d00988c07848738bd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Mon, 22 Jan 2018 14:00:05 +0100 Subject: Don't crash in delete_resp_header if no resp headers are set --- src/cowboy_req.erl | 5 ++++- 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) -> -- cgit v1.2.3