Merge pull request #6144 from JimMoen/fix-variable-byte-int-e42
fix(frame): variable byte num not limited in 4 bytes
This commit is contained in:
commit
a0a44eecb5
|
@ -1,4 +1,4 @@
|
|||
%% -*-: erlang -*-
|
||||
%% -*- mode: erlang -*-
|
||||
|
||||
{VSN,
|
||||
[
|
||||
|
@ -92,6 +92,7 @@
|
|||
{load_module,emqx_misc,brutal_purge,soft_purge,[]}
|
||||
]},
|
||||
{<<"4.2.5">>, [
|
||||
{load_module, emqx_frame, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_channel, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_session, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_congestion, brutal_purge, soft_purge, []},
|
||||
|
@ -110,6 +111,7 @@
|
|||
{load_module,emqx_misc,brutal_purge,soft_purge,[]}
|
||||
]},
|
||||
{<<"4.2.[6-7]">>, [
|
||||
{load_module, emqx_frame, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_channel, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_connection, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_ws_connection, brutal_purge, soft_purge, []},
|
||||
|
@ -121,6 +123,7 @@
|
|||
{load_module,emqx_misc,brutal_purge,soft_purge,[]}
|
||||
]},
|
||||
{<<"4.2.8">>, [
|
||||
{load_module, emqx_frame, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_channel, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_connection, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_cm, brutal_purge, soft_purge, []}
|
||||
|
@ -218,6 +221,7 @@
|
|||
{load_module,emqx_misc,brutal_purge,soft_purge,[]}
|
||||
]},
|
||||
{<<"4.2.5">>, [
|
||||
{load_module, emqx_frame, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_channel, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_session, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_congestion, brutal_purge, soft_purge, []},
|
||||
|
@ -236,6 +240,7 @@
|
|||
{load_module,emqx_misc,brutal_purge,soft_purge,[]}
|
||||
]},
|
||||
{<<"4.2.[6-7]">>, [
|
||||
{load_module, emqx_frame, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_channel, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_connection, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_ws_connection, brutal_purge, soft_purge, []},
|
||||
|
@ -247,6 +252,7 @@
|
|||
{load_module,emqx_misc,brutal_purge,soft_purge,[]}
|
||||
]},
|
||||
{<<"4.2.8">>, [
|
||||
{load_module, emqx_frame, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_channel, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_connection, brutal_purge, soft_purge, []},
|
||||
{load_module, emqx_cm, brutal_purge, soft_purge, []}
|
||||
|
|
|
@ -67,6 +67,8 @@
|
|||
version => ?MQTT_PROTO_V4
|
||||
}).
|
||||
|
||||
-define(MULTIPLIER_MAX, 16#200000).
|
||||
|
||||
-dialyzer({no_match, [serialize_utf8_string/2]}).
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
|
@ -142,7 +144,7 @@ parse_remaining_len(<<0:8, Rest/binary>>, Header, 1, 0, Options) ->
|
|||
parse_remaining_len(<<0:1, 2:7, Rest/binary>>, Header, 1, 0, Options) ->
|
||||
parse_frame(Rest, Header, 2, Options);
|
||||
parse_remaining_len(<<1:1, _Len:7, _Rest/binary>>, _Header, Multiplier, _Value, _Options)
|
||||
when Multiplier > 2097152 ->
|
||||
when Multiplier > ?MULTIPLIER_MAX ->
|
||||
error(malformed_variable_byte_integer);
|
||||
parse_remaining_len(<<1:1, Len:7, Rest/binary>>, Header, Multiplier, Value, Options) ->
|
||||
parse_remaining_len(Rest, Header, Multiplier * ?HIGHBIT, Value + Len * Multiplier, Options);
|
||||
|
@ -411,6 +413,9 @@ parse_property(<<16#2A, Val, Bin/binary>>, Props) ->
|
|||
|
||||
parse_variable_byte_integer(Bin) ->
|
||||
parse_variable_byte_integer(Bin, 1, 0).
|
||||
parse_variable_byte_integer(<<1:1, _Len:7, _Rest/binary>>, Multiplier, _Value)
|
||||
when Multiplier > ?MULTIPLIER_MAX ->
|
||||
error(malformed_variable_byte_integer);
|
||||
parse_variable_byte_integer(<<1:1, Len:7, Rest/binary>>, Multiplier, Value) ->
|
||||
parse_variable_byte_integer(Rest, Multiplier * ?HIGHBIT, Value + Len * Multiplier);
|
||||
parse_variable_byte_integer(<<0:1, Len:7, Rest/binary>>, Multiplier, Value) ->
|
||||
|
|
Loading…
Reference in New Issue