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

Merge pull request #6462 from JimMoen/fix-authz-pgsql

fix(authz): placeholder regular expression escape
JimMoen 4 лет назад
Родитель
Сommit
e0fd6d553e
1 измененных файлов с 9 добавлено и 7 удалено
  1. 9 7
      apps/emqx_authz/src/emqx_authz_postgresql.erl

+ 9 - 7
apps/emqx_authz/src/emqx_authz_postgresql.erl

@@ -57,13 +57,15 @@ parse_query(undefined) ->
     undefined;
 parse_query(Sql) ->
     case re:run(Sql, ?RE_PLACEHOLDER, [global, {capture, all, list}]) of
-        {match, Variables} ->
-            Params = [Var || [Var] <- Variables],
-            Vars = ["$" ++ integer_to_list(I) || I <- lists:seq(1, length(Params))],
-            NSql = lists:foldl(fun({Param, Var}, S) ->
-                       re:replace(S, Param, Var, [{return, list}])
-                   end, Sql, lists:zip(Params, Vars)),
-            {NSql, Params};
+        {match, Capured} ->
+            PlaceHolders = [PlaceHolder || [PlaceHolder] <- Capured],
+            Replacements = ["$" ++ integer_to_list(I) || I <- lists:seq(1, length(PlaceHolders))],
+            NSql = lists:foldl(
+                     fun({PlaceHolder, Replacement}, S) ->
+                             re:replace(
+                               S, emqx_authz:ph_to_re(PlaceHolder), Replacement, [{return, list}])
+                     end, Sql, lists:zip(PlaceHolders, Replacements)),
+            {NSql, PlaceHolders};
         nomatch ->
             {Sql, []}
     end.