From 3954b7bde220a08061b22714f894e5a658ec050e Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 15 Mar 2023 15:17:58 -0300 Subject: [PATCH] fix(bridges): function clause when a non-ingress bridge coexists with an egress bridge This was not caught by our tests because we always test bridge types in isolation. So, if the config only contains ingress-only bridges, the `on_message_publish` hook is never installed. In a real system, if there are bridges of mixed types in the config, the hook might be installed, and `emqx_bridge:get_matched_bridge_id` would crash when iterating over the ingress bridges. --- apps/emqx_bridge/src/emqx_bridge.erl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/emqx_bridge/src/emqx_bridge.erl b/apps/emqx_bridge/src/emqx_bridge.erl index d5d5adff1..98ce6a8b0 100644 --- a/apps/emqx_bridge/src/emqx_bridge.erl +++ b/apps/emqx_bridge/src/emqx_bridge.erl @@ -411,7 +411,9 @@ get_matched_bridge_id(BType, Conf, Topic, BName, Acc) when ?EGRESS_DIR_BRIDGES(B do_get_matched_bridge_id(Topic, Filter, BType, BName, Acc) end; get_matched_bridge_id(mqtt, #{egress := #{local := #{topic := Filter}}}, Topic, BName, Acc) -> - do_get_matched_bridge_id(Topic, Filter, mqtt, BName, Acc). + do_get_matched_bridge_id(Topic, Filter, mqtt, BName, Acc); +get_matched_bridge_id(_BType, _Conf, _Topic, _BName, Acc) -> + Acc. do_get_matched_bridge_id(Topic, Filter, BType, BName, Acc) -> case emqx_topic:match(Topic, Filter) of