Merge pull request #12992 from kjellwinblad/kjell/fix_rule_unescape_function/EMQX-12313

fix: make rule engine unescape convert \a to the terminal alarm char
This commit is contained in:
Kjell Winblad 2024-05-10 09:48:33 +02:00 committed by GitHub
commit 8c0b55a89e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 12 deletions

View File

@ -744,18 +744,18 @@ t_regex_replace(_) ->
?assertEqual(<<"a[cc]b[c]d">>, apply_func(regex_replace, [<<"accbcd">>, <<"c+">>, <<"[&]">>])). ?assertEqual(<<"a[cc]b[c]d">>, apply_func(regex_replace, [<<"accbcd">>, <<"c+">>, <<"[&]">>])).
t_unescape(_) -> t_unescape(_) ->
?assertEqual(<<"\n">>, emqx_rule_funcs:unescape(<<"\\n">>)), ?assertEqual(<<"\n">> = <<10>>, emqx_rule_funcs:unescape(<<"\\n">>)),
?assertEqual(<<"\t">>, emqx_rule_funcs:unescape(<<"\\t">>)), ?assertEqual(<<"\t">> = <<9>>, emqx_rule_funcs:unescape(<<"\\t">>)),
?assertEqual(<<"\r">>, emqx_rule_funcs:unescape(<<"\\r">>)), ?assertEqual(<<"\r">> = <<13>>, emqx_rule_funcs:unescape(<<"\\r">>)),
?assertEqual(<<"\b">>, emqx_rule_funcs:unescape(<<"\\b">>)), ?assertEqual(<<"\b">> = <<8>>, emqx_rule_funcs:unescape(<<"\\b">>)),
?assertEqual(<<"\f">>, emqx_rule_funcs:unescape(<<"\\f">>)), ?assertEqual(<<"\f">> = <<12>>, emqx_rule_funcs:unescape(<<"\\f">>)),
?assertEqual(<<"\v">>, emqx_rule_funcs:unescape(<<"\\v">>)), ?assertEqual(<<"\v">> = <<11>>, emqx_rule_funcs:unescape(<<"\\v">>)),
?assertEqual(<<"'">>, emqx_rule_funcs:unescape(<<"\\'">>)), ?assertEqual(<<"'">> = <<39>>, emqx_rule_funcs:unescape(<<"\\'">>)),
?assertEqual(<<"\"">>, emqx_rule_funcs:unescape(<<"\\\"">>)), ?assertEqual(<<"\"">> = <<34>>, emqx_rule_funcs:unescape(<<"\\\"">>)),
?assertEqual(<<"?">>, emqx_rule_funcs:unescape(<<"\\?">>)), ?assertEqual(<<"?">> = <<63>>, emqx_rule_funcs:unescape(<<"\\?">>)),
?assertEqual(<<"\a">>, emqx_rule_funcs:unescape(<<"\\a">>)), ?assertEqual(<<7>>, emqx_rule_funcs:unescape(<<"\\a">>)),
% Test escaping backslash itself % Test escaping backslash itself
?assertEqual(<<"\\">>, emqx_rule_funcs:unescape(<<"\\\\">>)), ?assertEqual(<<"\\">> = <<92>>, emqx_rule_funcs:unescape(<<"\\\\">>)),
% Test a string without any escape sequences % Test a string without any escape sequences
?assertEqual(<<"Hello, World!">>, emqx_rule_funcs:unescape(<<"Hello, World!">>)), ?assertEqual(<<"Hello, World!">>, emqx_rule_funcs:unescape(<<"Hello, World!">>)),
% Test a string with escape sequences % Test a string with escape sequences

View File

@ -289,7 +289,8 @@ unescape_string([$\\, $" | Rest], Acc) ->
unescape_string([$\\, $? | Rest], Acc) -> unescape_string([$\\, $? | Rest], Acc) ->
unescape_string(Rest, [$\? | Acc]); unescape_string(Rest, [$\? | Acc]);
unescape_string([$\\, $a | Rest], Acc) -> unescape_string([$\\, $a | Rest], Acc) ->
unescape_string(Rest, [$\a | Acc]); %% Terminal bell
unescape_string(Rest, [7 | Acc]);
%% Start of HEX escape code %% Start of HEX escape code
unescape_string([$\\, $x | [$0 | _] = HexStringStart], Acc) -> unescape_string([$\\, $x | [$0 | _] = HexStringStart], Acc) ->
unescape_handle_hex_string(HexStringStart, Acc); unescape_handle_hex_string(HexStringStart, Acc);