File 1187-erts-Robustify-test-nif_SUITE-ioq_nif.patch of Package erlang
From e14c9d47205db1dd755df3d8e48191e81aae918d Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Mon, 23 Nov 2020 13:23:47 +0100
Subject: [PATCH 2/2] erts: Robustify test nif_SUITE:ioq_nif
by not trusting correct number of arguments from caller.
---
erts/emulator/test/nif_SUITE_data/nif_SUITE.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/erts/emulator/test/nif_SUITE_data/nif_SUITE.c b/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
index d817f786b1..93708fa99c 100644
--- a/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
+++ b/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
@@ -3383,13 +3383,13 @@ static ERL_NIF_TERM ioq(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
ret = enif_make_resource(env, ioq);
enif_release_resource(ioq);
return ret;
- } else if (enif_is_identical(argv[0], enif_make_atom(env, "inspect"))) {
+ } else if (argc >= 2 && enif_is_identical(argv[0], enif_make_atom(env, "inspect"))) {
ErlNifIOVec vec, *iovec = NULL;
int i, iovcnt;
ERL_NIF_TERM *elems, tail, list;
ErlNifEnv *myenv = NULL;
- if (enif_is_identical(argv[2], enif_make_atom(env, "use_stack")))
+ if (argv >= 3 && enif_is_identical(argv[2], enif_make_atom(env, "use_stack")))
iovec = &vec;
if (argc >= 4 && enif_is_identical(argv[3], enif_make_atom(env, "use_env")))
myenv = env;
@@ -3416,13 +3416,13 @@ static ERL_NIF_TERM ioq(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
list = enif_make_list_from_array(env, elems, iovcnt);
enif_free(elems);
return list;
- } else {
+ } else if (argc >= 2) {
unsigned skip;
if (!enif_get_resource(env, argv[1], ioq_resource_type, (void**)&ioq)
|| !ioq->q)
return enif_make_badarg(env);
- if (enif_is_identical(argv[0], enif_make_atom(env, "example"))) {
+ if (argc == 3 && enif_is_identical(argv[0], enif_make_atom(env, "example"))) {
#ifndef __WIN32__
int fd[2], res = 0, cnt = 0, queue_cnt;
ERL_NIF_TERM tail;
@@ -3472,7 +3472,7 @@ static ERL_NIF_TERM ioq(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
enif_ioq_destroy(ioq->q);
ioq->q = NULL;
return enif_make_atom(env, "false");
- } else if (enif_is_identical(argv[0], enif_make_atom(env, "enqv"))) {
+ } else if (argc >= 4 && enif_is_identical(argv[0], enif_make_atom(env, "enqv"))) {
ErlNifIOVec vec, *iovec = &vec;
ERL_NIF_TERM tail;
@@ -3484,7 +3484,7 @@ static ERL_NIF_TERM ioq(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
return enif_make_badarg(env);
return enif_make_atom(env, "true");
- } else if (enif_is_identical(argv[0], enif_make_atom(env, "enqb"))) {
+ } else if (argc >= 4 && enif_is_identical(argv[0], enif_make_atom(env, "enqb"))) {
ErlNifBinary bin;
if (!enif_get_uint(env, argv[3], &skip) ||
!enif_inspect_binary(env, argv[2], &bin))
@@ -3494,7 +3494,7 @@ static ERL_NIF_TERM ioq(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
return enif_make_badarg(env);
return enif_make_atom(env, "true");
- } else if (enif_is_identical(argv[0], enif_make_atom(env, "enqbraw"))) {
+ } else if (argc >= 4 && enif_is_identical(argv[0], enif_make_atom(env, "enqbraw"))) {
ErlNifBinary bin;
ErlNifBinary localbin;
int i;
@@ -3518,7 +3518,7 @@ static ERL_NIF_TERM ioq(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
return enif_make_badarg(env);
else
return enif_make_atom(env, "true");
- } else if (enif_is_identical(argv[0], enif_make_atom(env, "peek"))) {
+ } else if (argc >= 3 && enif_is_identical(argv[0], enif_make_atom(env, "peek"))) {
int iovlen, num, i, off = 0;
SysIOVec *iov = enif_ioq_peek(ioq->q, &iovlen);
ErlNifBinary bin;
@@ -3534,7 +3534,7 @@ static ERL_NIF_TERM ioq(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
}
return enif_make_binary(env, &bin);
- } else if (enif_is_identical(argv[0], enif_make_atom(env, "deq"))) {
+ } else if (argc >= 3 && enif_is_identical(argv[0], enif_make_atom(env, "deq"))) {
int num;
size_t sz;
ErlNifUInt64 sz64;
--
2.26.2