aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2013-05-31 18:59:52 +0200
committerLoïc Hoguin <[email protected]>2013-05-31 18:59:52 +0200
commitc1a1fd125d8b0559f182bd8fc10de18f7259047d (patch)
tree2cd2ad94eba0aff9541a139e62944a54d976da03 /src
parent4fde6cba94f4ae65b6434aa722c08c60066f67d7 (diff)
downloadcowboy-c1a1fd125d8b0559f182bd8fc10de18f7259047d.tar.gz
cowboy-c1a1fd125d8b0559f182bd8fc10de18f7259047d.tar.bz2
cowboy-c1a1fd125d8b0559f182bd8fc10de18f7259047d.zip
Don't crash on empty Cookie header
It's not allowed, however a heavily deployed client (Flash player) can send such an empty header, therefore we make a special condition for it and return an empty list when it happens.
Diffstat (limited to 'src')
-rw-r--r--src/cowboy_req.erl10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/cowboy_req.erl b/src/cowboy_req.erl
index 093663c..0e1c8a7 100644
--- a/src/cowboy_req.erl
+++ b/src/cowboy_req.erl
@@ -492,7 +492,10 @@ cookie(Name, Req=#http_req{cookies=undefined}, Default) when is_binary(Name) ->
{ok, undefined, Req2} ->
{Default, Req2#http_req{cookies=[]}};
{ok, Cookies, Req2} ->
- cookie(Name, Req2#http_req{cookies=Cookies}, Default)
+ cookie(Name, Req2#http_req{cookies=Cookies}, Default);
+ %% Flash player incorrectly sends an empty Cookie header.
+ {error, badarg} ->
+ {Default, Req#http_req{cookies=[]}}
end;
cookie(Name, Req, Default) ->
case lists:keyfind(Name, 1, Req#http_req.cookies) of
@@ -507,7 +510,10 @@ cookies(Req=#http_req{cookies=undefined}) ->
{ok, undefined, Req2} ->
{[], Req2#http_req{cookies=[]}};
{ok, Cookies, Req2} ->
- cookies(Req2#http_req{cookies=Cookies})
+ cookies(Req2#http_req{cookies=Cookies});
+ %% Flash player incorrectly sends an empty Cookie header.
+ {error, badarg} ->
+ {[], Req#http_req{cookies=[]}}
end;
cookies(Req=#http_req{cookies=Cookies}) ->
{Cookies, Req}.