fix(frame): forbidden empty topic in strict mode

This commit is contained in:
firest 2022-03-29 10:34:50 +08:00
parent 3db1080887
commit 5febf480a2
1 changed files with 11 additions and 2 deletions

View File

@ -301,7 +301,7 @@ parse_packet(
Bin,
#{strict_mode := StrictMode, version := Ver}
) ->
{TopicName, Rest} = parse_utf8_string(Bin, StrictMode),
{TopicName, Rest} = parse_topic_name(Bin, StrictMode),
{PacketId, Rest1} =
case QoS of
?QOS_0 -> {undefined, Rest};
@ -422,7 +422,7 @@ parse_will_message(
StrictMode
) ->
{Props, Rest} = parse_properties(Bin, Ver, StrictMode),
{Topic, Rest1} = parse_utf8_string(Rest, StrictMode),
{Topic, Rest1} = parse_topic_name(Rest, StrictMode),
{Payload, Rest2} = parse_binary_data(Rest1),
{
Packet#mqtt_packet_connect{
@ -621,6 +621,15 @@ parse_binary_data(Bin) when
->
?PARSE_ERR(malformed_binary_data_length).
parse_topic_name(Bin, false) ->
parse_utf8_string(Bin, false);
parse_topic_name(Bin, true) ->
case parse_utf8_string(Bin, true) of
{<<>>, _Rest} -> ?PARSE_ERR(empty_topic_name);
Result -> Result
end.
%%--------------------------------------------------------------------
%% Serialize MQTT Packet
%%--------------------------------------------------------------------