Просмотр исходного кода

Accept commas as part of cookie values

Google Analytics has been observed to set cookie values containing
commas. We therefore need to accept them for interoperability.
Loïc Hoguin 11 лет назад
Родитель
Сommit
3ffadd8f45
1 измененных файлов с 19 добавлено и 4 удалено
  1. 19 4
      src/cow_cookie.erl

+ 19 - 4
src/cow_cookie.erl

@@ -80,8 +80,6 @@ parse_cookie_name(<< C, Rest/binary >>, Acc, Name) ->
 
 parse_cookie_value(<<>>, Acc, Name, Value) ->
 	lists:reverse([{Name, parse_cookie_trim(Value)}|Acc]);
-parse_cookie_value(<< $,, Rest/binary >>, Acc, Name, Value) ->
-	parse_cookie(Rest, [{Name, parse_cookie_trim(Value)}|Acc]);
 parse_cookie_value(<< $;, Rest/binary >>, Acc, Name, Value) ->
 	parse_cookie(Rest, [{Name, parse_cookie_trim(Value)}|Acc]);
 parse_cookie_value(<< $\t, _/binary >>, _, _, _) ->
@@ -130,6 +128,24 @@ parse_cookie_test_() ->
 		%% Space in value.
 		{<<"foo=Thu Jul 11 2013 15:38:43 GMT+0400 (MSK)">>,
 			[{<<"foo">>, <<"Thu Jul 11 2013 15:38:43 GMT+0400 (MSK)">>}]},
+		%% Comma in value. Google Analytics sets that kind of cookies.
+		{<<"refk=sOUZDzq2w2; sk=B602064E0139D842D620C7569640DBB4C81C45080651"
+			"9CC124EF794863E10E80; __utma=64249653.825741573.1380181332.1400"
+			"015657.1400019557.703; __utmb=64249653.1.10.1400019557; __utmc="
+			"64249653; __utmz=64249653.1400019557.703.13.utmcsr=bluesky.chic"
+			"agotribune.com|utmccn=(referral)|utmcmd=referral|utmcct=/origin"
+			"als/chi-12-indispensable-digital-tools-bsi,0,0.storygallery">>, [
+				{<<"refk">>, <<"sOUZDzq2w2">>},
+				{<<"sk">>, <<"B602064E0139D842D620C7569640DBB4C81C45080651"
+					"9CC124EF794863E10E80">>},
+				{<<"__utma">>, <<"64249653.825741573.1380181332.1400"
+					"015657.1400019557.703">>},
+				{<<"__utmb">>, <<"64249653.1.10.1400019557">>},
+				{<<"__utmc">>, <<"64249653">>},
+				{<<"__utmz">>, <<"64249653.1400019557.703.13.utmcsr=bluesky.chic"
+					"agotribune.com|utmccn=(referral)|utmcmd=referral|utmcct=/origin"
+					"als/chi-12-indispensable-digital-tools-bsi,0,0.storygallery">>}
+		]},
 		%% Potential edge cases (initially from Mochiweb).
 		{<<"foo=\\x">>, [{<<"foo">>, <<"\\x">>}]},
 		{<<"=">>, {error, badarg}},
@@ -140,8 +156,7 @@ parse_cookie_test_() ->
 			[{<<"foo">>, <<"\\\"">>}, {<<"bar">>, <<"good">>}]},
 		{<<"foo=\"\\\";bar">>, {error, badarg}},
 		{<<>>, []},
-		{<<"foo=bar , baz=wibble ">>,
-			[{<<"foo">>, <<"bar">>}, {<<"baz">>, <<"wibble">>}]}
+		{<<"foo=bar , baz=wibble ">>, [{<<"foo">>, <<"bar , baz=wibble">>}]}
 	],
 	[{V, fun() -> R = parse_cookie(V) end} || {V, R} <- Tests].
 -endif.