aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
diff options
context:
space:
mode:
authorJohn Högberg <[email protected]>2018-06-05 14:05:38 +0200
committerJohn Högberg <[email protected]>2018-06-05 14:05:38 +0200
commit5cb944bf32b7b3f4ec5500710fe10c28a643e1fd (patch)
tree817ed501c02aeda7cdc03725a6d4325a7f5741b0 /erts/emulator/test/nif_SUITE_data/nif_SUITE.c
parentbbb3d151e6329d58b34e526fefb6964677d93104 (diff)
parentcfaede58328ace4bb4fb7c5e1b055e420c0ded9a (diff)
downloadotp-5cb944bf32b7b3f4ec5500710fe10c28a643e1fd.tar.gz
otp-5cb944bf32b7b3f4ec5500710fe10c28a643e1fd.tar.bz2
otp-5cb944bf32b7b3f4ec5500710fe10c28a643e1fd.zip
Merge branch 'maint-20' into maint
* maint-20: Updated OTP version Prepare release inets: Gracefully handle bad headers [erl_docgen] Update version [erl_docgen] Add missing file db_funcs.xsl to file list erts: Fix bug in system_profile erts: Fix bug in enif_binary_to_term for immediates
Diffstat (limited to 'erts/emulator/test/nif_SUITE_data/nif_SUITE.c')
-rw-r--r--erts/emulator/test/nif_SUITE_data/nif_SUITE.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/erts/emulator/test/nif_SUITE_data/nif_SUITE.c b/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
index b47d013bd2..87cd3650ff 100644
--- a/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
+++ b/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
@@ -2384,7 +2384,7 @@ static ERL_NIF_TERM term_to_binary(ErlNifEnv* env, int argc, const ERL_NIF_TERM
static ERL_NIF_TERM binary_to_term(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
ErlNifBinary bin;
- ERL_NIF_TERM term, ret_term;
+ ERL_NIF_TERM term, dummy, ret_term;
ErlNifPid pid;
ErlNifEnv *msg_env = env;
unsigned int opts;
@@ -2397,6 +2397,9 @@ static ERL_NIF_TERM binary_to_term(ErlNifEnv* env, int argc, const ERL_NIF_TERM
|| !enif_get_uint(env, argv[2], &opts))
return enif_make_badarg(env);
+ /* build dummy heap term first to provoke OTP-15080 */
+ dummy = enif_make_list_cell(msg_env, atom_true, atom_false);
+
ret = enif_binary_to_term(msg_env, bin.data, bin.size, &term,
(ErlNifBinaryToTerm)opts);
if (!ret)
@@ -2404,11 +2407,12 @@ static ERL_NIF_TERM binary_to_term(ErlNifEnv* env, int argc, const ERL_NIF_TERM
ret_term = enif_make_uint64(env, ret);
if (msg_env != env) {
- enif_send(env, &pid, msg_env, term);
+ enif_send(env, &pid, msg_env,
+ enif_make_tuple2(msg_env, term, dummy));
enif_free_env(msg_env);
return ret_term;
} else {
- return enif_make_tuple2(env, ret_term, term);
+ return enif_make_tuple3(env, ret_term, term, dummy);
}
}