Explorar o código

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 hai 1 ano
pai
achega
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.