@@ -186,15 +186,13 @@ defmodule Mint.WebSocket.Frame do
186186 end
187187
188188 defp decode_payload_and_mask ( payload , masked? ) do
189- { payload_length , rest } = decode_payload_length ( payload )
190- { mask , rest } = decode_mask ( rest , masked? )
191-
192- case rest do
193- << payload :: binary - size ( payload_length ) , more :: bitstring >> ->
194- { :ok , payload , mask , more }
195-
196- partial when is_binary ( partial ) ->
197- :buffer
189+ with { payload_length , rest } <- decode_payload_length ( payload ) ,
190+ { mask , rest } <- decode_mask ( rest , masked? ) ,
191+ << payload :: binary - size ( payload_length ) , more :: bitstring >> <- rest do
192+ { :ok , payload , mask , more }
193+ else
194+ partial when is_binary ( partial ) -> :buffer
195+ :buffer -> :buffer
198196 end
199197 end
200198
@@ -204,12 +202,16 @@ defmodule Mint.WebSocket.Frame do
204202 ) ,
205203 do: { payload_length , rest }
206204
205+ defp decode_payload_length ( << 127 :: integer - size ( 7 ) >> ) , do: :buffer
206+
207207 defp decode_payload_length (
208208 << 126 :: integer - size ( 7 ) , payload_length :: unsigned - integer - size ( 8 ) - unit ( 2 ) ,
209209 rest :: bitstring >>
210210 ) ,
211211 do: { payload_length , rest }
212212
213+ defp decode_payload_length ( << 126 :: integer - size ( 7 ) >> ) , do: :buffer
214+
213215 defp decode_payload_length ( << payload_length :: integer - size ( 7 ) , rest :: bitstring >> )
214216 when payload_length in 0 .. 125 ,
215217 do: { payload_length , rest }
0 commit comments