Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:20
erlang
1187-erts-Robustify-test-nif_SUITE-ioq_nif.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor