0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 12:20:24 +00:00

Fix match_qs with constraints when key is not present

Original fix by Ali Farhadi <a.farhadi@gmail.com>.
This commit is contained in:
geeksilva97 2024-01-18 20:50:27 -03:00 committed by Loïc Hoguin
parent 3e145af9b9
commit 08c2be058a
No known key found for this signature in database
GPG key ID: 8A9DF795F6FED764
3 changed files with 8 additions and 1 deletions

View file

@ -1024,7 +1024,12 @@ filter([], Map, Errors) ->
_ -> {error, Errors} _ -> {error, Errors}
end; end;
filter([{Key, Constraints}|Tail], Map, Errors) -> filter([{Key, Constraints}|Tail], Map, Errors) ->
filter_constraints(Tail, Map, Errors, Key, maps:get(Key, Map), Constraints); case maps:find(Key, Map) of
{ok, Value} ->
filter_constraints(Tail, Map, Errors, Key, Value, Constraints);
error ->
filter(Tail, Map, Errors#{Key => required})
end;
filter([{Key, Constraints, Default}|Tail], Map, Errors) -> filter([{Key, Constraints, Default}|Tail], Map, Errors) ->
case maps:find(Key, Map) of case maps:find(Key, Map) of
{ok, Value} -> {ok, Value} ->

View file

@ -86,6 +86,7 @@ echo(<<"match">>, Req, Opts) ->
Fields = [binary_to_atom(F, latin1) || F <- Fields0], Fields = [binary_to_atom(F, latin1) || F <- Fields0],
Value = case Type of Value = case Type of
<<"qs">> -> cowboy_req:match_qs(Fields, Req); <<"qs">> -> cowboy_req:match_qs(Fields, Req);
<<"qs_with_constraints">> -> cowboy_req:match_qs([{id, integer}], Req);
<<"cookies">> -> cowboy_req:match_cookies(Fields, Req); <<"cookies">> -> cowboy_req:match_cookies(Fields, Req);
<<"body_qs">> -> <<"body_qs">> ->
%% Note that the Req should not be discarded but for the %% Note that the Req should not be discarded but for the

View file

@ -266,6 +266,7 @@ match_qs(Config) ->
end, end,
%% Ensure match errors result in a 400 response. %% Ensure match errors result in a 400 response.
{400, _, _} = do_get("/match/qs/a/c?a=b", [], Config), {400, _, _} = do_get("/match/qs/a/c?a=b", [], Config),
{400, _, _} = do_get("/match/qs_with_constraints", [], Config),
%% This function is tested more extensively through unit tests. %% This function is tested more extensively through unit tests.
ok. ok.