Skip to content

Commit 5339702

Browse files
committed
NIFs: check if is tuple and arity before accessing it
Add a check before calling term_get_tuple_element. Signed-off-by: Davide Bettio <davide@uninstall.it>
1 parent 011006e commit 5339702

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

src/libAtomVM/nifs.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1222,13 +1222,17 @@ static term do_spawn(Context *ctx, Context *new_ctx, size_t arity, size_t n_free
12221222
term link_term = interop_proplist_get_value(opts_term, LINK_ATOM);
12231223
term monitor_term = interop_proplist_get_value(opts_term, MONITOR_ATOM);
12241224
term heap_growth_strategy = interop_proplist_get_value_default(opts_term, ATOMVM_HEAP_GROWTH_ATOM, BOUNDED_FREE_ATOM);
1225-
term request_term = interop_proplist_get_value(opts_term, REQUEST_ATOM);
1225+
term request_term = interop_proplist_get_value_default(opts_term, REQUEST_ATOM, UNDEFINED_ATOM);
12261226
term group_leader;
1227+
bool valid_request = false;
12271228

1228-
if (UNLIKELY(request_term != term_nil())) {
1229+
if (LIKELY(request_term == UNDEFINED_ATOM)) {
1230+
group_leader = ctx->group_leader;
1231+
} else if (term_is_tuple(request_term) && (term_get_tuple_arity(request_term) >= 5)) {
1232+
valid_request = true;
12291233
group_leader = term_get_tuple_element(request_term, 3);
12301234
} else {
1231-
group_leader = ctx->group_leader;
1235+
RAISE_ERROR(BADARG_ATOM);
12321236
}
12331237

12341238
if (min_heap_size_term != term_nil()) {
@@ -1338,7 +1342,7 @@ static term do_spawn(Context *ctx, Context *new_ctx, size_t arity, size_t n_free
13381342
term_put_tuple_element(pid_ref_tuple, 1, ref);
13391343

13401344
return pid_ref_tuple;
1341-
} else if (UNLIKELY(request_term != term_nil())) {
1345+
} else if (UNLIKELY(valid_request)) {
13421346
// Handling of spawn_request
13431347
// spawn_request requires that the reply is enqueued before
13441348
// any message from the spawned process

0 commit comments

Comments
 (0)