]> git.kaiwu.me - njs.git/commitdiff
Fixed Array.prototype.includes() with "undefined" argument.
authorAlexander Borisov <alexander.borisov@nginx.com>
Wed, 30 Oct 2019 13:43:10 +0000 (16:43 +0300)
committerAlexander Borisov <alexander.borisov@nginx.com>
Wed, 30 Oct 2019 13:43:10 +0000 (16:43 +0300)
This closes #230 issue on GitHub.

src/njs_array.c
src/test/njs_unit_test.c

index b00575fe3ff3d7f41ce0a14d8fd92659f649139e..f340b7ac4064a74caa2f248d5bcccd8f4e734761 100644 (file)
@@ -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;
index 31f7c5b593154bdab4c8c5942ce44b1572e89ea5..6b27725f990654e4827500add40eaafba7cff0e7 100644 (file)
@@ -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") },