From fbeba39f0d0cfd6f5222804b4a0d2bc498ea62a8 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Thu, 6 Jan 2022 20:29:35 +0800 Subject: [PATCH] fix(rule): compare to null variables should return false --- .../src/emqx_rule_engine.appup.src | 86 +++++++++++-------- .../src/emqx_rule_runtime.erl | 4 + 2 files changed, 54 insertions(+), 36 deletions(-) diff --git a/apps/emqx_rule_engine/src/emqx_rule_engine.appup.src b/apps/emqx_rule_engine/src/emqx_rule_engine.appup.src index 2c2a5c4cb..d97c6542f 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_engine.appup.src +++ b/apps/emqx_rule_engine/src/emqx_rule_engine.appup.src @@ -3,76 +3,90 @@ [ {"4.3.6", [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]} ]}, {"4.3.5", [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]} , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]} ]}, {"4.3.4", - [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}, - {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]} ]}, {"4.3.3", - [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}, - {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}, - {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]} ]}, {"4.3.2", - [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}, - {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}, - {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}, - {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]} + [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + , {apply,{emqx_stats,cancel_update,[rule_registery_stats]}} + , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]} ]}, {"4.3.1", - [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}, - {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}, - {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}, - {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]} + [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + , {apply,{emqx_stats,cancel_update,[rule_registery_stats]}} + , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]} ]}, {"4.3.0", - [ {load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]}, - {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}, - {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}, - {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}, - {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]} + [ {load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + , {apply,{emqx_stats,cancel_update,[rule_registery_stats]}} + , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]} ]}, {<<".*">>, []} ], [ {"4.3.6", [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]} ]}, {"4.3.5", [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]} , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]} ]}, {"4.3.4", - [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}, - {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]} ]}, {"4.3.3", - [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}, - {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}, - {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]} ]}, {"4.3.2", - [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}, - {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}, - {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}, - {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]} + [ {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + , {apply,{emqx_stats,cancel_update,[rule_registery_stats]}} + , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]} ]}, {"4.3.1", - [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}, - {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}, - {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}, - {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]} + [ {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + , {apply,{emqx_stats,cancel_update,[rule_registery_stats]}} + , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]} ]}, {"4.3.0", - [ {load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]}, - {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}, - {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}, - {apply,{emqx_stats,cancel_update,[rule_registery_stats]}}, - {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]} + [ {load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_engine,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_registry,brutal_purge,soft_purge,[]} + , {apply,{emqx_stats,cancel_update,[rule_registery_stats]}} + , {load_module,emqx_rule_actions,brutal_purge,soft_purge,[]} + , {load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]} ]}, {<<".*">>, []} ] diff --git a/apps/emqx_rule_engine/src/emqx_rule_runtime.erl b/apps/emqx_rule_engine/src/emqx_rule_runtime.erl index f9e210ab3..080498d82 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_runtime.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_runtime.erl @@ -204,6 +204,10 @@ match_conditions({}, _Data) -> true. %% comparing numbers against strings +compare(Op, undefined, undefined) -> + do_compare(Op, undefined, undefined); +compare(_Op, L, R) when L == undefined; R == undefined -> + false; compare(Op, L, R) when is_number(L), is_binary(R) -> do_compare(Op, L, number(R)); compare(Op, L, R) when is_binary(L), is_number(R) ->