File 0543-erts-Fix-infinite-loop-when-error-logger-is-not-pres.patch of Package erlang

From 6efe1fdfa2bf30708ce64b28c5a78cf1c772e3cb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20H=C3=B6gberg?= <john@erlang.org>
Date: Tue, 8 Oct 2019 08:51:39 +0200
Subject: [PATCH 1/2] erts: Fix infinite loop when error logger is not present

---
 erts/emulator/beam/erl_trace.c | 57 ++++++++++++++++++++++++++----------------
 1 file changed, 35 insertions(+), 22 deletions(-)

diff --git a/erts/emulator/beam/erl_trace.c b/erts/emulator/beam/erl_trace.c
index f6f177887c..cc483a2148 100644
--- a/erts/emulator/beam/erl_trace.c
+++ b/erts/emulator/beam/erl_trace.c
@@ -2118,36 +2118,49 @@ sys_msg_disp_failure(ErtsSysMsgQ *smqp, Eterm receiver)
 	erts_thr_progress_unblock();
 	break;
     case SYS_MSG_TYPE_ERRLGR: {
-	char *no_elgger = "(no logger present)";
 	Eterm *tp;
 	Eterm tag;
+
 	if (is_not_tuple(smqp->msg)) {
-	unexpected_elmsg:
-	    erts_fprintf(stderr,
-			 "%s unexpected logger message: %T\n",
-			 no_elgger,
-			 smqp->msg);
+	    goto unexpected_error_msg;
 	}
-
 	tp = tuple_val(smqp->msg);
-	if (arityval(tp[0]) != 2)
-	    goto unexpected_elmsg;
-	if (is_not_tuple(tp[2]))
-	    goto unexpected_elmsg;
+	if (arityval(tp[0]) != 2) {
+	    goto unexpected_error_msg;
+	}
+	if (is_not_tuple(tp[2])) {
+	    goto unexpected_error_msg;
+	}
 	tp = tuple_val(tp[2]);
-	if (arityval(tp[0]) != 3)
-	    goto unexpected_elmsg;
+	if (arityval(tp[0]) != 3) {
+	    goto unexpected_error_msg;
+	}
 	tag = tp[1];
-	if (is_not_tuple(tp[3]))
-	    goto unexpected_elmsg;
+	if (is_not_tuple(tp[3])) {
+	    goto unexpected_error_msg;
+	}
 	tp = tuple_val(tp[3]);
-	if (arityval(tp[0]) != 3)
-	    goto unexpected_elmsg;
-	if (is_not_list(tp[3]))
-	    goto unexpected_elmsg;
-	erts_fprintf(stderr, "%s %T: %T\n",
-		     no_elgger, tag, CAR(list_val(tp[3])));
-	break;
+	if (arityval(tp[0]) != 3) {
+	    goto unexpected_error_msg;
+	}
+	if (is_not_list(tp[3])) {
+	    goto unexpected_error_msg;
+	}
+
+        {
+            static const char *no_logger = "(no logger present)";
+        /* no_error_logger: */
+            erts_fprintf(stderr, "%s %T: %T\n",
+                         no_logger, tag, CAR(list_val(tp[3])));
+            break;
+        unexpected_error_msg:
+            erts_fprintf(stderr,
+                         "%s unexpected logger message: %T\n",
+                         no_logger,
+                         smqp->msg);
+            break;
+        }
+        ASSERT(0);
     }
     case SYS_MSG_TYPE_PROC_MSG:
         break;
-- 
2.16.4

openSUSE Build Service is sponsored by