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