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

Merge pull request #14371 from zmstone/241209-variform-undefined-as-empty-string

fix(variform): intermediate variable reference to undefined or null
zmstone 1 год назад
Родитель
Сommit
c4cdf60fcc

+ 1 - 1
apps/emqx_message_transformation/test/emqx_message_transformation_http_api_SUITE.erl

@@ -644,7 +644,7 @@ t_smoke_test_2(_Config) ->
             <<"node">> := NodeBin,
             <<"peername">> := <<"127.0.0.1:", _/binary>>,
             <<"publish_received_at">> := PRAt,
-            <<"username">> := <<"undefined">>,
+            <<"username">> := <<"">>,
             <<"flags">> := #{<<"dup">> := false, <<"retain">> := false},
             <<"timestamp">> := _,
             <<"pub_props">> := #{

+ 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.