Преглед изворни кода

fix(api): escape the searching string

JianBo He пре 4 година
родитељ
комит
b36865e970

+ 6 - 3
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]) ->

+ 6 - 3
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]) ->