Skip to content

Commit 0214d4c

Browse files
committed
buffer incomplete payload lengths (autobahn 9.4.3)
1 parent b89ae23 commit 0214d4c

1 file changed

Lines changed: 11 additions & 9 deletions

File tree

lib/mint/web_socket/frame.ex

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)