fix(frame): forbidden empty topic in strict mode
This commit is contained in:
parent
3db1080887
commit
5febf480a2
|
@ -301,7 +301,7 @@ parse_packet(
|
||||||
Bin,
|
Bin,
|
||||||
#{strict_mode := StrictMode, version := Ver}
|
#{strict_mode := StrictMode, version := Ver}
|
||||||
) ->
|
) ->
|
||||||
{TopicName, Rest} = parse_utf8_string(Bin, StrictMode),
|
{TopicName, Rest} = parse_topic_name(Bin, StrictMode),
|
||||||
{PacketId, Rest1} =
|
{PacketId, Rest1} =
|
||||||
case QoS of
|
case QoS of
|
||||||
?QOS_0 -> {undefined, Rest};
|
?QOS_0 -> {undefined, Rest};
|
||||||
|
@ -422,7 +422,7 @@ parse_will_message(
|
||||||
StrictMode
|
StrictMode
|
||||||
) ->
|
) ->
|
||||||
{Props, Rest} = parse_properties(Bin, Ver, 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),
|
{Payload, Rest2} = parse_binary_data(Rest1),
|
||||||
{
|
{
|
||||||
Packet#mqtt_packet_connect{
|
Packet#mqtt_packet_connect{
|
||||||
|
@ -621,6 +621,15 @@ parse_binary_data(Bin) when
|
||||||
->
|
->
|
||||||
?PARSE_ERR(malformed_binary_data_length).
|
?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
|
%% Serialize MQTT Packet
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue