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

fix(variform): intermediate variable reference to undefined or null

when variable is bound but bound as 'undefined' or 'null', it is now
rendered as empty string, but not "undefined" or "null"
zmstone 1 год назад
Родитель
Сommit
bbdbc4f62c

+ 2 - 0
apps/emqx_utils/src/emqx_variform.erl

@@ -286,6 +286,8 @@ resolve_func_name(FuncNameStr) ->
 %% _Opts can be extended in the future. For example, unbound var as 'undfeined'
 resolve_var_value(VarName, Bindings, _Opts) ->
     case emqx_template:lookup_var(split(VarName), Bindings) of
+        {ok, Value} when ?IS_EMPTY(Value) ->
+            <<"">>;
         {ok, Value} ->
             Value;
         {error, _Reason} ->

+ 5 - 0
apps/emqx_utils/test/emqx_variform_tests.erl

@@ -32,6 +32,11 @@ render_test_() ->
         {"direct var reference undefined", fun() ->
             ?assertEqual({ok, <<"">>}, render("a", #{a => undefined}))
         end},
+        {"var reference undefined", fun() ->
+            ?assertEqual(
+                {ok, <<"/c1">>}, render("concat([a, '/', c])", #{a => undefined, c => <<"c1">>})
+            )
+        end},
         {"direct var reference null", fun() ->
             ?assertEqual({ok, <<"">>}, render("a", #{a => null}))
         end},

+ 1 - 0
changes/ce/fix-14371.en.md

@@ -0,0 +1 @@
+Fix clientid override expression to render `undefined` as empty string.