diff --git a/src/emqx_channel.erl b/src/emqx_channel.erl index 20257911b..dc0c52598 100644 --- a/src/emqx_channel.erl +++ b/src/emqx_channel.erl @@ -1341,7 +1341,7 @@ process_alias(Packet = #mqtt_packet{ {ok, Topic} -> NPublish = Publish#mqtt_packet_publish{topic_name = Topic}, {ok, Packet#mqtt_packet{variable = NPublish}, Channel}; - false -> {error, ?RC_PROTOCOL_ERROR} + error -> {error, ?RC_PROTOCOL_ERROR} end; process_alias(#mqtt_packet{ @@ -1685,7 +1685,7 @@ run_hooks(Name, Args, Acc) -> -compile({inline, [find_alias/3, save_alias/4]}). -find_alias(_, _, undefined) -> false; +find_alias(_, _, undefined) -> error; find_alias(inbound, AliasId, _TopicAliases = #{inbound := Aliases}) -> maps:find(AliasId, Aliases); find_alias(outbound, Topic, _TopicAliases = #{outbound := Aliases}) -> @@ -1739,4 +1739,3 @@ flag(false) -> 0. set_field(Name, Value, Channel) -> Pos = emqx_misc:index_of(Name, record_info(fields, channel)), setelement(Pos+1, Channel, Value). - diff --git a/test/emqx_channel_SUITE.erl b/test/emqx_channel_SUITE.erl index a438fc79a..fd7da9f20 100644 --- a/test/emqx_channel_SUITE.erl +++ b/test/emqx_channel_SUITE.erl @@ -674,6 +674,13 @@ t_process_alias(_) -> {ok, #mqtt_packet{variable = #mqtt_packet_publish{topic_name = <<"t">>}}, _Chan} = emqx_channel:process_alias(#mqtt_packet{variable = Publish}, Channel). +t_process_alias_inexistent_alias(_) -> + Publish = #mqtt_packet_publish{topic_name = <<>>, properties = #{'Topic-Alias' => 1}}, + Channel = channel(), + ?assertEqual( + {error, ?RC_PROTOCOL_ERROR}, + emqx_channel:process_alias(#mqtt_packet{variable = Publish}, Channel)). + t_packing_alias(_) -> Packet1 = #mqtt_packet{variable = #mqtt_packet_publish{ topic_name = <<"x">>, @@ -710,6 +717,20 @@ t_packing_alias(_) -> #mqtt_packet{variable = #mqtt_packet_publish{topic_name = <<"z">>}}, channel())). +t_packing_alias_inexistent_alias(_) -> + Publish = #mqtt_packet_publish{topic_name = <<>>, properties = #{'Topic-Alias' => 1}}, + Channel = channel(), + Packet = #mqtt_packet{variable = Publish}, + ExpectedChannel = emqx_channel:set_field( + topic_aliases, + #{ inbound => #{} + , outbound => #{<<>> => 1} + }, + Channel), + ?assertEqual( + {Packet, ExpectedChannel}, + emqx_channel:packing_alias(Packet, Channel)). + t_check_pub_acl(_) -> ok = meck:expect(emqx_zone, enable_acl, fun(_) -> true end), Publish = ?PUBLISH_PACKET(?QOS_0, <<"t">>, 1, <<"payload">>),