This is an automated email from the ASF dual-hosted git repository.

rnewson pushed a commit to branch struct-hd-15
in repository https://gitbox.apache.org/repos/asf/couchdb-cowlib.git

commit 1949f034eae142306c97510432ab0952754a25d8
Author: Loïc Hoguin <[email protected]>
AuthorDate: Mon Apr 20 12:47:59 2020 +0200

    Fix structured header tests added up until now
---
 src/cow_http_struct_hd.erl | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/src/cow_http_struct_hd.erl b/src/cow_http_struct_hd.erl
index 4138929..39897b2 100644
--- a/src/cow_http_struct_hd.erl
+++ b/src/cow_http_struct_hd.erl
@@ -62,24 +62,24 @@
 -spec parse_dictionary(binary()) -> sh_dictionary().
 parse_dictionary(<<>>) ->
        {#{}, []};
-parse_dictionary(<<C,R/bits>>) when ?IS_LC_ALPHA(C) ->
+parse_dictionary(<<C,R/bits>>) when ?IS_LC_ALPHA(C) or (C =:= $*) ->
        {Dict, Order, <<>>} = parse_dict_key(R, #{}, [], <<C>>),
        {Dict, Order}.
 
 parse_dict_key(<<$=,$(,R0/bits>>, Acc, Order, K) ->
-       false = maps:is_key(K, Acc),
        {Item, R} = parse_inner_list(R0, []),
        parse_dict_before_sep(R, Acc#{K => Item}, [K|Order]);
 parse_dict_key(<<$=,R0/bits>>, Acc, Order, K) ->
-       false = maps:is_key(K, Acc),
        {Item, R} = parse_item1(R0),
        parse_dict_before_sep(R, Acc#{K => Item}, [K|Order]);
 parse_dict_key(<<C,R/bits>>, Acc, Order, K)
                when ?IS_LC_ALPHA(C) or ?IS_DIGIT(C)
                        or (C =:= $_) or (C =:= $-) or (C =:= $.) or (C =:= $*) 
->
        parse_dict_key(R, Acc, Order, <<K/binary,C>>);
+parse_dict_key(<<$;,R0/bits>>, Acc, Order, K) ->
+       {Params, R} = parse_before_param(R0, #{}),
+       parse_dict_before_sep(R, Acc#{K => {with_params, true, Params}}, 
[K|Order]);
 parse_dict_key(R, Acc, Order, K) ->
-       false = maps:is_key(K, Acc),
        parse_dict_before_sep(R, Acc#{K => {with_params, true, #{}}}, 
[K|Order]).
 
 parse_dict_before_sep(<<$\s,R/bits>>, Acc, Order) ->
@@ -91,7 +91,7 @@ parse_dict_before_sep(<<>>, Acc, Order) ->
 
 parse_dict_before_member(<<$\s,R/bits>>, Acc, Order) ->
        parse_dict_before_member(R, Acc, Order);
-parse_dict_before_member(<<C,R/bits>>, Acc, Order) when ?IS_LC_ALPHA(C) ->
+parse_dict_before_member(<<C,R/bits>>, Acc, Order) when ?IS_LC_ALPHA(C) or (C 
=:= $*) ->
        parse_dict_key(R, Acc, Order, <<C>>).
 
 -spec parse_item(binary()) -> sh_item().
@@ -149,7 +149,7 @@ parse_inner_list(R0, Acc) ->
 
 parse_before_param(<<$\s,R/bits>>, Acc) ->
        parse_before_param(R, Acc);
-parse_before_param(<<C,R/bits>>, Acc) when ?IS_LC_ALPHA(C) ->
+parse_before_param(<<C,R/bits>>, Acc) when ?IS_LC_ALPHA(C) or (C =:= $*) ->
        parse_param(R, Acc, <<C>>).
 
 parse_param(<<$;,R/bits>>, Acc, K) ->
@@ -158,10 +158,8 @@ parse_param(<<$;,R/bits>>, Acc, K) ->
 parse_param(<<$=,R0/bits>>, Acc, K) ->
        case parse_bare_item(R0) of
                {Item, <<$;,R/bits>>} ->
-                       false = maps:is_key(K, Acc),
                        parse_before_param(R, Acc#{K => Item});
                {Item, R} ->
-                       false = maps:is_key(K, Acc),
                        {Acc#{K => Item}, R}
        end;
 parse_param(<<C,R/bits>>, Acc, K)

Reply via email to