File 1067-erts-Fix-leak-in-erl_drv_send-output_term.patch of Package erlang

From c6d5e4312d81f3e711d5be26fa6abf61de0f7805 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Wed, 16 Dec 2020 16:31:36 +0100
Subject: [PATCH] erts: Fix leak in erl_drv_send/output_term

when driver trying to send an invalid term

erts_factory_undo() did not free factory->message
when mode==FACTORY_HALLOC.
---
 erts/emulator/beam/erl_message.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/erts/emulator/beam/erl_message.c b/erts/emulator/beam/erl_message.c
index cdd771ef7d..eb28774550 100644
--- a/erts/emulator/beam/erl_message.c
+++ b/erts/emulator/beam/erl_message.c
@@ -1805,6 +1805,15 @@ void erts_factory_undo(ErtsHeapFactory* factory)
                                    ERTS_HEAP_FRAG_SIZE(factory->heap_frags_saved->alloc_size));
                 }
             }
+            if (factory->message) {
+                ASSERT(factory->message->data.attached != ERTS_MSG_COMBINED_HFRAG);
+                ASSERT(!factory->message->data.heap_frag);
+
+                /* Set the message to NIL in order for it not to be treated as
+                   a distributed message by erts_cleanup_messages */
+                factory->message->m[0] = NIL;
+                erts_cleanup_messages(factory->message);
+            }
         }
         break;
 
-- 
2.26.2

openSUSE Build Service is sponsored by