Просмотр исходного кода

fix(coap): Ensure that the retain flag is a boolean value

firest 3 лет назад
Родитель
Сommit
3cc76c0adf
1 измененных файлов с 7 добавлено и 1 удалено
  1. 7 1
      apps/emqx_gateway/src/coap/handler/emqx_coap_pubsub_handler.erl

+ 7 - 1
apps/emqx_gateway/src/coap/handler/emqx_coap_pubsub_handler.erl

@@ -121,7 +121,13 @@ apply_publish_opts(Msg, MQTTMsg) ->
             maps:fold(
             maps:fold(
                 fun
                 fun
                     (<<"retain">>, V, Acc) ->
                     (<<"retain">>, V, Acc) ->
-                        Val = erlang:binary_to_atom(V),
+                        Val =
+                            case emqx_misc:safe_to_existing_atom(V) of
+                                {ok, true} ->
+                                    true;
+                                _ ->
+                                    false
+                            end,
                         emqx_message:set_flag(retain, Val, Acc);
                         emqx_message:set_flag(retain, Val, Acc);
                     (<<"expiry">>, V, Acc) ->
                     (<<"expiry">>, V, Acc) ->
                         Val = erlang:binary_to_integer(V),
                         Val = erlang:binary_to_integer(V),