mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 04:10:24 +00:00
Websocket: Also apply max_frame_size limit to decompressed data
Before this commit frames could "cheat" by compressing data below the limit which would get expanded above the limit. Now Cowboy will stop decompressing data when the limit is reached.
This commit is contained in:
parent
e00131824a
commit
0f1b20c383
1 changed files with 6 additions and 2 deletions
|
@ -480,12 +480,16 @@ parse_header(State=#state{opts=Opts, frag_state=FragState, extensions=Extensions
|
|||
websocket_close(State, HandlerState, {error, badframe})
|
||||
end.
|
||||
|
||||
parse_payload(State=#state{frag_state=FragState, utf8_state=Incomplete, extensions=Extensions},
|
||||
parse_payload(State=#state{opts=Opts, frag_state=FragState, utf8_state=Incomplete, extensions=Extensions},
|
||||
HandlerState, ParseState=#ps_payload{
|
||||
type=Type, len=Len, mask_key=MaskKey, rsv=Rsv,
|
||||
unmasked=Unmasked, unmasked_len=UnmaskedLen}, Data) ->
|
||||
MaxFrameSize = case maps:get(max_frame_size, Opts, infinity) of
|
||||
infinity -> infinity;
|
||||
MaxFrameSize0 -> MaxFrameSize0 - UnmaskedLen
|
||||
end,
|
||||
case cow_ws:parse_payload(Data, MaskKey, Incomplete, UnmaskedLen,
|
||||
Type, Len, FragState, Extensions, Rsv) of
|
||||
Type, Len, FragState, Extensions#{max_inflate_size => MaxFrameSize}, Rsv) of
|
||||
{ok, CloseCode, Payload, Utf8State, Rest} ->
|
||||
dispatch_frame(State#state{utf8_state=Utf8State}, HandlerState,
|
||||
ParseState#ps_payload{unmasked= <<Unmasked/binary, Payload/binary>>,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue