diff --git a/src/hackney.erl b/src/hackney.erl index 72488748..f40f58ef 100644 --- a/src/hackney.erl +++ b/src/hackney.erl @@ -1345,7 +1345,9 @@ cookies(Headers) -> case hackney_cookie:parse_cookie(V) of {error, _} -> Acc; [{Name, _} | _]=Cookie -> - [{Name, Cookie} | Acc] + [{Name, Cookie} | Acc]; + %% An empty Set-Cookie value holds no cookie. + [] -> Acc end; _ -> Acc diff --git a/test/hackney_cookie_tests.erl b/test/hackney_cookie_tests.erl index 9053fbb8..7e23abf5 100644 --- a/test/hackney_cookie_tests.erl +++ b/test/hackney_cookie_tests.erl @@ -42,6 +42,15 @@ parse_cookie_test_() -> ], [{V, ?_assertEqual(R, hackney_cookie:parse_cookie(V))} || {V, R} <- Tests]. +cookies_test_() -> + %% Set-Cookie headers that hold no cookie are skipped. + Headers = [{<<"Set-Cookie">>, <<>>}, + {<<"Set-Cookie">>, <<" ; ">>}, + {<<"Set-Cookie">>, <<"$Version=1">>}, + {<<"Set-Cookie">>, <<"k1=v1; Path=/">>}], + ?_assertEqual([{<<"k1">>, [{<<"k1">>, <<"v1">>}, {<<"Path">>, <<"/">>}]}], + hackney:cookies(Headers)). + setcookie_test_() -> %% {Name, Value, Opts, Result} Tests = [