fix(emqx_packet): list element index out of range

This commit is contained in:
Zaiming Shi 2021-05-03 22:44:37 +02:00 committed by Zaiming (Stone) Shi
parent 0f30bdadbb
commit bf4baf708a
2 changed files with 29 additions and 25 deletions

View File

@ -96,23 +96,6 @@
-define(DISCONNECT, 14). %% Client or Server is disconnecting -define(DISCONNECT, 14). %% Client or Server is disconnecting
-define(AUTH, 15). %% Authentication exchange -define(AUTH, 15). %% Authentication exchange
-define(TYPE_NAMES, [
'CONNECT',
'CONNACK',
'PUBLISH',
'PUBACK',
'PUBREC',
'PUBREL',
'PUBCOMP',
'SUBSCRIBE',
'SUBACK',
'UNSUBSCRIBE',
'UNSUBACK',
'PINGREQ',
'PINGRESP',
'DISCONNECT',
'AUTH']).
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% MQTT V3.1.1 Connect Return Codes %% MQTT V3.1.1 Connect Return Codes
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------

View File

@ -46,6 +46,24 @@
-export([format/1]). -export([format/1]).
-define(TYPE_NAMES,
{ 'CONNECT'
, 'CONNACK'
, 'PUBLISH'
, 'PUBACK'
, 'PUBREC'
, 'PUBREL'
, 'PUBCOMP'
, 'SUBSCRIBE'
, 'SUBACK'
, 'UNSUBSCRIBE'
, 'UNSUBACK'
, 'PINGREQ'
, 'PINGRESP'
, 'DISCONNECT'
, 'AUTH'
}).
-type(connect() :: #mqtt_packet_connect{}). -type(connect() :: #mqtt_packet_connect{}).
-type(publish() :: #mqtt_packet_publish{}). -type(publish() :: #mqtt_packet_publish{}).
-type(subscribe() :: #mqtt_packet_subscribe{}). -type(subscribe() :: #mqtt_packet_subscribe{}).
@ -61,9 +79,13 @@ type(#mqtt_packet{header = #mqtt_packet_header{type = Type}}) ->
Type. Type.
%% @doc Name of MQTT packet type. %% @doc Name of MQTT packet type.
-spec(type_name(emqx_types:packet()) -> atom()). -spec(type_name(emqx_types:packet() | non_neg_integer()) -> atom() | string()).
type_name(Packet) when is_record(Packet, mqtt_packet) -> type_name(#mqtt_packet{} = Packet) ->
lists:nth(type(Packet), ?TYPE_NAMES). type_name(type(Packet));
type_name(0) -> 'FORBIDDEN';
type_name(Type) when Type > 0 andalso Type =< tuple_size(?TYPE_NAMES) ->
element(Type, ?TYPE_NAMES);
type_name(Type) -> "UNKNOWN("++ integer_to_list(Type) ++")".
%% @doc Dup flag of MQTT packet. %% @doc Dup flag of MQTT packet.
-spec(dup(emqx_types:packet()) -> boolean()). -spec(dup(emqx_types:packet()) -> boolean()).
@ -417,12 +439,11 @@ format_header(#mqtt_packet_header{type = Type,
dup = Dup, dup = Dup,
qos = QoS, qos = QoS,
retain = Retain}, S) -> retain = Retain}, S) ->
S1 = if S1 = case S == undefined of
S == undefined -> <<>>; true -> <<>>;
true -> [", ", S] false -> [", ", S]
end, end,
io_lib:format("~s(Q~p, R~p, D~p~s)", io_lib:format("~s(Q~p, R~p, D~p~s)", [type_name(Type), QoS, i(Retain), i(Dup), S1]).
[lists:nth(Type, ?TYPE_NAMES), QoS, i(Retain), i(Dup), S1]).
format_variable(undefined, _) -> format_variable(undefined, _) ->
undefined; undefined;