From 2ded7fbe8c1bb1b8648df018e4513ddb1e7f8669 Mon Sep 17 00:00:00 2001 From: JianBo He Date: Fri, 22 Oct 2021 09:35:36 +0800 Subject: [PATCH] fix(api): escape the searching string --- apps/emqx_gateway/src/emqx_gateway_api_clients.erl | 9 ++++++--- apps/emqx_management/src/emqx_mgmt_api_clients.erl | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/apps/emqx_gateway/src/emqx_gateway_api_clients.erl b/apps/emqx_gateway/src/emqx_gateway_api_clients.erl index 480e259e9..40e058e32 100644 --- a/apps/emqx_gateway/src/emqx_gateway_api_clients.erl +++ b/apps/emqx_gateway/src/emqx_gateway_api_clients.erl @@ -258,14 +258,17 @@ ms(lifetime, X) -> fuzzy_filter_fun(Fuzzy) -> REFuzzy = lists:map(fun({K, like, S}) -> - {ok, RE} = re:compile(S), - {K, like, RE} - end, Fuzzy), + {ok, RE} = re:compile(escape(S)), + {K, like, RE} + end, Fuzzy), fun(MsRaws) when is_list(MsRaws) -> lists:filter( fun(E) -> run_fuzzy_filter(E, REFuzzy) end , MsRaws) end. +escape(B) when is_binary(B) -> + re:replace(B, <<"\\\\">>, <<"\\\\\\\\">>, [{return, binary}, global]). + run_fuzzy_filter(_, []) -> true; run_fuzzy_filter(E = {_, #{clientinfo := ClientInfo}, _}, [{Key, _, RE} | Fuzzy]) -> diff --git a/apps/emqx_management/src/emqx_mgmt_api_clients.erl b/apps/emqx_management/src/emqx_mgmt_api_clients.erl index 8050cf206..e89561122 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_clients.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_clients.erl @@ -620,14 +620,17 @@ ms(created_at, X) -> fuzzy_filter_fun(Fuzzy) -> REFuzzy = lists:map(fun({K, like, S}) -> - {ok, RE} = re:compile(S), - {K, like, RE} - end, Fuzzy), + {ok, RE} = re:compile(escape(S)), + {K, like, RE} + end, Fuzzy), fun(MsRaws) when is_list(MsRaws) -> lists:filter( fun(E) -> run_fuzzy_filter(E, REFuzzy) end , MsRaws) end. +escape(B) when is_binary(B) -> + re:replace(B, <<"\\\\">>, <<"\\\\\\\\">>, [{return, binary}, global]). + run_fuzzy_filter(_, []) -> true; run_fuzzy_filter(E = {_, #{clientinfo := ClientInfo}, _}, [{Key, _, RE} | Fuzzy]) ->