From 84bc6ba28cf9c37f4820469f979fc3b1f4d1d487 Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Tue, 28 May 2024 10:43:32 +0200 Subject: [PATCH 1/2] fix: trace formatter should not crash when given a non-binary payload Fixes: https://emqx.atlassian.net/browse/EMQX-12474 --- .../src/emqx_trace/emqx_trace_formatter.erl | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl b/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl index 34469f835..e540ae82a 100644 --- a/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl +++ b/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl @@ -89,8 +89,17 @@ weight({packet, _}) -> {0, packet}; weight({payload, _}) -> {2, payload}; weight({K, _}) -> {1, K}. -format_packet(undefined, _) -> ""; -format_packet(Packet, Encode) -> emqx_packet:format(Packet, Encode). +format_packet(undefined, _) -> + ""; +format_packet(Packet, Encode) -> + try + emqx_packet:format(Packet, Encode) + catch + _:_ -> + %% We don't want to crash if there is a field named packet with + %% some other type of value + Packet + end. format_payload(undefined, _) -> ""; @@ -100,7 +109,11 @@ format_payload(Payload, text) when ?MAX_PAYLOAD_FORMAT_LIMIT(Payload) -> unicode:characters_to_list(Payload); format_payload(Payload, hex) when ?MAX_PAYLOAD_FORMAT_LIMIT(Payload) -> binary:encode_hex(Payload); format_payload(<> = Payload, Type) -> - emqx_packet:format_truncated_payload(Part, byte_size(Payload), Type). + emqx_packet:format_truncated_payload(Part, byte_size(Payload), Type); +format_payload(Payload, _) -> + %% We don't want to crash if there is a field named payload with some other + %% type of value + Payload. to_iolist(Atom) when is_atom(Atom) -> atom_to_list(Atom); to_iolist(Int) when is_integer(Int) -> integer_to_list(Int); From 2eb5c24068e617729c33381b9574c981a223b98f Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Tue, 28 May 2024 10:54:04 +0200 Subject: [PATCH 2/2] docs: add change log entry --- changes/ce/fix-13140.en.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/ce/fix-13140.en.md diff --git a/changes/ce/fix-13140.en.md b/changes/ce/fix-13140.en.md new file mode 100644 index 000000000..921da9052 --- /dev/null +++ b/changes/ce/fix-13140.en.md @@ -0,0 +1 @@ +The issue causing text traces for the republish action to crash and not display correctly has been resolved.