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

Merge pull request #9416 from lafirest/fix/emqx_ctl

fix(ctl): fix unsafe `list_to_atom`
lafirest 3 лет назад
Родитель
Сommit
345fa65241
3 измененных файлов с 17 добавлено и 5 удалено
  1. 12 5
      apps/emqx/src/emqx_ctl.erl
  2. 2 0
      changes/v5.0.12-en.md
  3. 3 0
      changes/v5.0.12-zh.md

+ 12 - 5
apps/emqx/src/emqx_ctl.erl

@@ -103,7 +103,13 @@ cast(Msg) -> gen_server:cast(?SERVER, Msg).
 run_command([]) ->
     run_command(help, []);
 run_command([Cmd | Args]) ->
-    run_command(list_to_atom(Cmd), Args).
+    case emqx_misc:safe_to_existing_atom(Cmd) of
+        {ok, Cmd1} ->
+            run_command(Cmd1, Args);
+        _ ->
+            help(),
+            {error, cmd_not_found}
+    end.
 
 -spec run_command(cmd(), list(string())) -> ok | {error, term()}.
 run_command(help, []) ->
@@ -220,12 +226,13 @@ init([]) ->
 handle_call({register_command, Cmd, MF, Opts}, _From, State = #state{seq = Seq}) ->
     case ets:match(?CMD_TAB, {{'$1', Cmd}, '_', '_'}) of
         [] ->
-            ets:insert(?CMD_TAB, {{Seq, Cmd}, MF, Opts});
+            ets:insert(?CMD_TAB, {{Seq, Cmd}, MF, Opts}),
+            {reply, ok, next_seq(State)};
         [[OriginSeq] | _] ->
             ?SLOG(warning, #{msg => "CMD_overidden", cmd => Cmd, mf => MF}),
-            true = ets:insert(?CMD_TAB, {{OriginSeq, Cmd}, MF, Opts})
-    end,
-    {reply, ok, next_seq(State)};
+            true = ets:insert(?CMD_TAB, {{OriginSeq, Cmd}, MF, Opts}),
+            {reply, ok, State}
+    end;
 handle_call(Req, _From, State) ->
     ?SLOG(error, #{msg => "unexpected_call", call => Req}),
     {reply, ignored, State}.

+ 2 - 0
changes/v5.0.12-en.md

@@ -2,4 +2,6 @@
 
 ## Enhancements
 
+- Improve the CLI to avoid waste atom table when typing erros [#9416](https://github.com/emqx/emqx/pull/9416).
+
 ## Bug fixes

+ 3 - 0
changes/v5.0.12-zh.md

@@ -3,3 +3,6 @@
 ## 增强
 
 ## 修复
+
+- 优化命令行实现, 避免输入错误指令时, 产生不必要的原子表消耗 [#9416](https://github.com/emqx/emqx/pull/9416)。
+