diff options
author | Sverker Eriksson <[email protected]> | 2018-05-15 20:42:46 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2018-05-16 14:22:35 +0200 |
commit | d7bacbc798d608f259eb2faaaf194cb9df323018 (patch) | |
tree | 3f83cbd4c488c99322189ff8431e9ab60fb39848 /erts/emulator/beam/erl_nif.c | |
parent | da06fd040775fffee17409ebbd6fa797e34d6f99 (diff) | |
download | otp-d7bacbc798d608f259eb2faaaf194cb9df323018.tar.gz otp-d7bacbc798d608f259eb2faaaf194cb9df323018.tar.bz2 otp-d7bacbc798d608f259eb2faaaf194cb9df323018.zip |
erts: Fix bug in enif_binary_to_term for immediates
Symptom: Heap corruption
Expanded test case to provoke this bug
and test some more term types.
Diffstat (limited to 'erts/emulator/beam/erl_nif.c')
-rw-r--r-- | erts/emulator/beam/erl_nif.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c index 479a2f4809..a41145af41 100644 --- a/erts/emulator/beam/erl_nif.c +++ b/erts/emulator/beam/erl_nif.c @@ -1157,8 +1157,10 @@ size_t enif_binary_to_term(ErlNifEnv *dst_env, if (is_non_value(*term)) { return 0; } - erts_factory_close(&factory); - cache_env(dst_env); + if (size > 0) { + erts_factory_close(&factory); + cache_env(dst_env); + } ASSERT(bp > data); return bp - data; |