From bc9ff655902f3d79533a8f8d5d6dd3b6ea278cb0 Mon Sep 17 00:00:00 2001 From: Alexander Borisov Date: Wed, 30 Oct 2019 16:43:10 +0300 Subject: [PATCH] Fixed Array.prototype.includes() with "undefined" argument. This closes #230 issue on GitHub. --- src/njs_array.c | 6 +++++- src/test/njs_unit_test.c | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/njs_array.c b/src/njs_array.c index b00575fe..f340b7ac 100644 --- a/src/njs_array.c +++ b/src/njs_array.c @@ -1880,6 +1880,10 @@ static njs_int_t njs_array_handler_includes(njs_vm_t *vm, njs_array_iterator_args_t *args, njs_value_t *entry, uint32_t n) { + if (!njs_is_valid(entry)) { + entry = njs_value_arg(&njs_value_undefined); + } + if (njs_values_strict_equal(args->argument, entry)) { njs_set_true(&vm->retval); @@ -1947,7 +1951,7 @@ njs_array_prototype_includes(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, iargs.from = (uint32_t) from; iargs.to = length; - if (njs_is_numeric(iargs.argument) && isnan(njs_number(iargs.argument))) { + if (njs_is_number(iargs.argument) && isnan(njs_number(iargs.argument))) { ret = njs_array_iterator(vm, &iargs, njs_array_handler_includes_nan); if (njs_fast_path(ret == NJS_DECLINED)) { return NJS_OK; diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 31f7c5b5..6b27725f 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -6202,6 +6202,9 @@ static njs_unit_test_t njs_test[] = "Array.prototype.includes.call(o); i"), njs_str("1") }, + { njs_str("[,,,].includes(undefined)"), + njs_str("true") }, + { njs_str("''.startsWith('')"), njs_str("true") }, -- 2.47.3