test(frame): malformed utf-8 packet

This commit is contained in:
JimMoen 2022-03-01 16:59:19 +08:00
parent 9a75004759
commit 0849a2d4c7
1 changed files with 57 additions and 38 deletions

View File

@ -43,66 +43,68 @@ all() ->
groups() -> groups() ->
[{parse, [parallel], [{parse, [parallel],
[t_parse_cont, [ t_parse_cont
t_parse_frame_too_large, , t_parse_frame_too_large
t_parse_frame_malformed_variable_byte_integer , t_parse_frame_malformed_variable_byte_integer
, t_parse_malformed_utf8_string
]}, ]},
{connect, [parallel], {connect, [parallel],
[t_serialize_parse_v3_connect, [ t_serialize_parse_v3_connect
t_serialize_parse_v4_connect, , t_serialize_parse_v4_connect
t_serialize_parse_v5_connect, , t_serialize_parse_v5_connect
t_serialize_parse_connect_without_clientid, , t_serialize_parse_connect_without_clientid
t_serialize_parse_connect_with_will, , t_serialize_parse_connect_with_will
t_serialize_parse_bridge_connect , t_serialize_parse_bridge_connect
]}, ]},
{connack, [parallel], {connack, [parallel],
[t_serialize_parse_connack, [ t_serialize_parse_connack
t_serialize_parse_connack_v5 , t_serialize_parse_connack_v5
]}, ]},
{publish, [parallel], {publish, [parallel],
[t_parse_sticky_frames, [ t_parse_sticky_frames
t_serialize_parse_qos0_publish, , t_serialize_parse_qos0_publish
t_serialize_parse_qos1_publish, , t_serialize_parse_qos1_publish
t_serialize_parse_qos2_publish, , t_serialize_parse_qos2_publish
t_serialize_parse_publish_v5 , t_serialize_parse_publish_v5
]}, ]},
{puback, [parallel], {puback, [parallel],
[t_serialize_parse_puback, [ t_serialize_parse_puback
t_serialize_parse_puback_v3_4, , t_serialize_parse_puback_v3_4
t_serialize_parse_puback_v5, , t_serialize_parse_puback_v5
t_serialize_parse_pubrec, , t_serialize_parse_pubrec
t_serialize_parse_pubrec_v5, , t_serialize_parse_pubrec_v5
t_serialize_parse_pubrel, , t_serialize_parse_pubrel
t_serialize_parse_pubrel_v5, , t_serialize_parse_pubrel_v5
t_serialize_parse_pubcomp, , t_serialize_parse_pubcomp
t_serialize_parse_pubcomp_v5 , t_serialize_parse_pubcomp_v5
]}, ]},
{subscribe, [parallel], {subscribe, [parallel],
[t_serialize_parse_subscribe, [ t_serialize_parse_subscribe
t_serialize_parse_subscribe_v5 , t_serialize_parse_subscribe_v5
]}, ]},
{suback, [parallel], {suback, [parallel],
[t_serialize_parse_suback, [ t_serialize_parse_suback
t_serialize_parse_suback_v5 , t_serialize_parse_suback_v5
]}, ]},
{unsubscribe, [parallel], {unsubscribe, [parallel],
[t_serialize_parse_unsubscribe, [ t_serialize_parse_unsubscribe
t_serialize_parse_unsubscribe_v5 , t_serialize_parse_unsubscribe_v5
]}, ]},
{unsuback, [parallel], {unsuback, [parallel],
[t_serialize_parse_unsuback, [ t_serialize_parse_unsuback
t_serialize_parse_unsuback_v5 , t_serialize_parse_unsuback_v5
]}, ]},
{ping, [parallel], {ping, [parallel],
[t_serialize_parse_pingreq, [ t_serialize_parse_pingreq
t_serialize_parse_pingresp , t_serialize_parse_pingresp
]}, ]},
{disconnect, [parallel], {disconnect, [parallel],
[t_serialize_parse_disconnect, [ t_serialize_parse_disconnect
t_serialize_parse_disconnect_v5 , t_serialize_parse_disconnect_v5
]}, ]},
{auth, [parallel], {auth, [parallel],
[t_serialize_parse_auth_v5] [ t_serialize_parse_auth_v5
]
}]. }].
init_per_suite(Config) -> init_per_suite(Config) ->
@ -139,6 +141,23 @@ t_parse_frame_malformed_variable_byte_integer(_) ->
?ASSERT_FRAME_THROW(malformed_variable_byte_integer, ?ASSERT_FRAME_THROW(malformed_variable_byte_integer,
emqx_frame:parse(MalformedPayload, ParseState)). emqx_frame:parse(MalformedPayload, ParseState)).
t_parse_malformed_utf8_string(_) ->
MalformedPacket = <<16,31,0,4,
%% Specification name, should be "MQTT"
%% 77,81,84,84,
%% malformed 1-Byte UTF-8 in (U+0000 .. U+001F] && [U+007F])
16#00,16#01,16#1F,16#7F,
4,194,0,60,
0,4,101,109,
113,120,0,5,
97,100,109,105,
110,0,6,112,
117,98,108,105,
99>>,
ParseState = emqx_frame:initial_parse_state(#{strict_mode => true}),
?ASSERT_FRAME_THROW(utf8_string_invalid, emqx_frame:parse(MalformedPacket, ParseState)).
t_serialize_parse_v3_connect(_) -> t_serialize_parse_v3_connect(_) ->
Bin = <<16,37,0,6,77,81,73,115,100,112,3,2,0,60,0,23,109,111,115, Bin = <<16,37,0,6,77,81,73,115,100,112,3,2,0,60,0,23,109,111,115,
113,112,117, 98,47,49,48,52,53,49,45,105,77,97,99,46,108, 113,112,117, 98,47,49,48,52,53,49,45,105,77,97,99,46,108,