File 0815-Fix-logger-improper-list-report.patch of Package erlang
From dad66d89d4b5a6a2b57ceba7ef413f7455fdc407 Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang.org>
Date: Mon, 20 Dec 2021 17:37:23 +0100
Subject: [PATCH] Fix logger improper list report
---
lib/kernel/src/logger.erl | 21 ++++++++++++---------
lib/kernel/test/logger_SUITE.erl | 4 ++++
2 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/lib/kernel/src/logger.erl b/lib/kernel/src/logger.erl
index b109414742..1f8e300dd9 100644
--- a/lib/kernel/src/logger.erl
+++ b/lib/kernel/src/logger.erl
@@ -318,8 +318,8 @@ format_otp_report(Report) ->
FormatArgs :: {io:format(),[term()]}.
format_report(Report) when is_map(Report) ->
format_report(maps:to_list(Report));
-format_report(Report) when is_list(Report) ->
- case lists:flatten(Report) of
+format_report(Report) ->
+ try lists:flatten(Report) of
[] ->
{"~tp",[[]]};
FlatList ->
@@ -329,9 +329,9 @@ format_report(Report) when is_list(Report) ->
false ->
format_term_list(Report,[],[])
end
- end;
-format_report(Report) ->
- {"~tp",[Report]}.
+ catch _:_ ->
+ {"~tp",[Report]}
+ end.
format_term_list([{Tag,Data}|T],Format,Args) ->
PorS = case string_p(Data) of
@@ -344,10 +344,13 @@ format_term_list([Data|T],Format,Args) ->
format_term_list([],Format,Args) ->
{lists:flatten(lists:join($\n,lists:reverse(Format))),lists:reverse(Args)}.
-string_p(List) when is_list(List) ->
- string_p1(lists:flatten(List));
-string_p(_) ->
- false.
+string_p(List) ->
+ try lists:flatten(List) of
+ FlatList ->
+ string_p1(FlatList)
+ catch _:_ ->
+ false
+ end.
string_p1([]) ->
false;
diff --git a/lib/kernel/test/logger_SUITE.erl b/lib/kernel/test/logger_SUITE.erl
index 99f695a949..f9ae51ae40 100644
--- a/lib/kernel/test/logger_SUITE.erl
+++ b/lib/kernel/test/logger_SUITE.erl
@@ -496,9 +496,13 @@ cache_module_level(cleanup,_Config) ->
format_report(_Config) ->
{"~ts",["string"]} = logger:format_report("string"),
+ {"~tp",["strin"++$g]} =
+ logger:format_report("strin"++$g), %% improper list
{"~tp",[term]} = logger:format_report(term),
{"~tp",[[]]} = logger:format_report([]),
{" ~tp: ~tp",[key,value]} = logger:format_report([{key,value}]),
+ {" ~tp: ~tp",[key,"strin"++$g]} =
+ logger:format_report([{key,"strin"++$g}]), %% improper list
KeyVals = [{key1,value1},{key2,"value2"},{key3,[]}],
KeyValRes =
{" ~tp: ~tp\n ~tp: ~ts\n ~tp: ~tp",
--
2.31.1