diff options
author | Sverker Eriksson <sverker@erlang.org> | 2020-12-16 16:31:36 +0100 |
---|---|---|
committer | Sverker Eriksson <sverker@erlang.org> | 2020-12-16 16:31:59 +0100 |
commit | c6d5e4312d81f3e711d5be26fa6abf61de0f7805 (patch) | |
tree | a7319b447b0ec9dbdefd3a7ff97a5adde5188978 /erts/emulator/beam/erl_message.c | |
parent | da06fd040775fffee17409ebbd6fa797e34d6f99 (diff) | |
download | erlang-c6d5e4312d81f3e711d5be26fa6abf61de0f7805.tar.gz |
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.
Diffstat (limited to 'erts/emulator/beam/erl_message.c')
-rw-r--r-- | erts/emulator/beam/erl_message.c | 9 |
1 files changed, 9 insertions, 0 deletions
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; |