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

openSUSE Build Service is sponsored by