Browse Source

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.
Loïc Hoguin 12 years ago
parent
commit
c1a1fd125d
1 changed files with 8 additions and 2 deletions
  1. 8 2
      src/cowboy_req.erl

+ 8 - 2
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}.