mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 12:20:24 +00:00
Reply with 400 on if*-match parsing crash
This commit is contained in:
parent
3d9078018d
commit
07ef3c32d7
2 changed files with 15 additions and 5 deletions
|
@ -668,7 +668,9 @@ token(<< C, Rest/binary >>, Fun, Case, Acc) ->
|
||||||
|
|
||||||
-spec quoted_string(binary(), fun()) -> any().
|
-spec quoted_string(binary(), fun()) -> any().
|
||||||
quoted_string(<< $", Rest/binary >>, Fun) ->
|
quoted_string(<< $", Rest/binary >>, Fun) ->
|
||||||
quoted_string(Rest, Fun, <<>>).
|
quoted_string(Rest, Fun, <<>>);
|
||||||
|
quoted_string(_, _Fun) ->
|
||||||
|
{error, badarg}.
|
||||||
|
|
||||||
-spec quoted_string(binary(), fun(), binary()) -> any().
|
-spec quoted_string(binary(), fun(), binary()) -> any().
|
||||||
quoted_string(<<>>, _Fun, _Acc) ->
|
quoted_string(<<>>, _Fun, _Acc) ->
|
||||||
|
|
|
@ -523,13 +523,17 @@ resource_exists(Req, State) ->
|
||||||
|
|
||||||
if_match_exists(Req, State) ->
|
if_match_exists(Req, State) ->
|
||||||
State2 = State#state{exists=true},
|
State2 = State#state{exists=true},
|
||||||
case cowboy_req:parse_header(<<"if-match">>, Req) of
|
try cowboy_req:parse_header(<<"if-match">>, Req) of
|
||||||
{ok, undefined, Req2} ->
|
{ok, undefined, Req2} ->
|
||||||
if_unmodified_since_exists(Req2, State2);
|
if_unmodified_since_exists(Req2, State2);
|
||||||
{ok, '*', Req2} ->
|
{ok, '*', Req2} ->
|
||||||
if_unmodified_since_exists(Req2, State2);
|
if_unmodified_since_exists(Req2, State2);
|
||||||
{ok, ETagsList, Req2} ->
|
{ok, ETagsList, Req2} ->
|
||||||
if_match(Req2, State2, ETagsList)
|
if_match(Req2, State2, ETagsList);
|
||||||
|
{error, badarg} ->
|
||||||
|
respond(Req, State2, 400)
|
||||||
|
catch Class:Reason ->
|
||||||
|
error_terminate(Req, State2, Class, Reason, if_match)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
if_match(Req, State, EtagsList) ->
|
if_match(Req, State, EtagsList) ->
|
||||||
|
@ -573,13 +577,17 @@ if_unmodified_since(Req, State, IfUnmodifiedSince) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
if_none_match_exists(Req, State) ->
|
if_none_match_exists(Req, State) ->
|
||||||
case cowboy_req:parse_header(<<"if-none-match">>, Req) of
|
try cowboy_req:parse_header(<<"if-none-match">>, Req) of
|
||||||
{ok, undefined, Req2} ->
|
{ok, undefined, Req2} ->
|
||||||
if_modified_since_exists(Req2, State);
|
if_modified_since_exists(Req2, State);
|
||||||
{ok, '*', Req2} ->
|
{ok, '*', Req2} ->
|
||||||
precondition_is_head_get(Req2, State);
|
precondition_is_head_get(Req2, State);
|
||||||
{ok, EtagsList, Req2} ->
|
{ok, EtagsList, Req2} ->
|
||||||
if_none_match(Req2, State, EtagsList)
|
if_none_match(Req2, State, EtagsList);
|
||||||
|
{error, badarg} ->
|
||||||
|
respond(Req, State, 400)
|
||||||
|
catch Class:Reason ->
|
||||||
|
error_terminate(Req, State, Class, Reason, if_none_match)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
if_none_match(Req, State, EtagsList) ->
|
if_none_match(Req, State, EtagsList) ->
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue