]> git.kaiwu.me - njs.git/commitdiff
Fixed Math.max() for undefined arguments.
authorAlexander Borisov <alexander.borisov@nginx.com>
Tue, 19 Mar 2019 15:26:44 +0000 (18:26 +0300)
committerAlexander Borisov <alexander.borisov@nginx.com>
Tue, 19 Mar 2019 15:26:44 +0000 (18:26 +0300)
njs/njs_math.c
njs/test/njs_unit_test.c

index 31a8f11bec52a7a3aab0817ab08fd01fb77d47de..e96f562e644b0025f57ffe40233125ce748eced7 100644 (file)
@@ -502,7 +502,11 @@ njs_object_math_max(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
 
     if (nargs > 1) {
         for (i = 1; i < nargs; i++) {
-            if (!njs_is_numeric(&args[i])) {
+            if (njs_is_undefined(&args[i])) {
+                num = NAN;
+                goto done;
+
+            } else if (!njs_is_numeric(&args[i])) {
                 njs_vm_trap_value(vm, &args[i]);
 
                 return njs_trap(vm, NJS_TRAP_NUMBER_ARG);
@@ -519,6 +523,8 @@ njs_object_math_max(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         num = -INFINITY;
     }
 
+done:
+
     njs_value_number_set(&vm->retval, num);
 
     return NXT_OK;
index 8edae9c0280f1b27e39f6a55ea2153dda08d5110..e11a5054ba9fd99fdc6a35a12553fd76c1a75655 100644 (file)
@@ -10028,6 +10028,18 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("Math.max('1', '2', '5')"),
       nxt_string("5") },
 
+    { nxt_string("Math.max(5, {valueOf: function () {return 10}}, 6)"),
+      nxt_string("10") },
+
+    { nxt_string("Math.max(5, {valueOf: function () {return 10}}, 20)"),
+      nxt_string("20") },
+
+    { nxt_string("Math.max(5, undefined, 20)"),
+      nxt_string("NaN") },
+
+    { nxt_string("Math.max(-10, null, -30)"),
+      nxt_string("0") },
+
     { nxt_string("Math.min()"),
       nxt_string("Infinity") },