From f8c642a52224cc8deb969ec018470d4bdff89119 Mon Sep 17 00:00:00 2001 From: Valentin Bartenev Date: Fri, 16 Dec 2016 17:52:15 +0300 Subject: [PATCH] Math.pow() method fix. --- njs/njs_math.c | 7 ++++--- njs/test/njs_unit_test.c | 6 ++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/njs/njs_math.c b/njs/njs_math.c index cb3f9932..4bd636ab 100644 --- a/njs/njs_math.c +++ b/njs/njs_math.c @@ -579,11 +579,12 @@ njs_object_math_pow(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, exponent = args[2].data.u.number; /* - * Accordig to ECMA-262 the result of Math.pow(+/-1, +/-Infinity) - * should be NaN. + * According to ECMA-262: + * 1. If exponent is NaN, the result should be NaN; + * 2. The result of Math.pow(+/-1, +/-Infinity) should be NaN. */ - if (fabs(base) != 1 || !isinf(exponent)) { + if (fabs(base) != 1 || (!isnan(exponent) && !isinf(exponent))) { num = pow(base, exponent); } else { diff --git a/njs/test/njs_unit_test.c b/njs/test/njs_unit_test.c index 4ebb7c5f..16d79778 100644 --- a/njs/test/njs_unit_test.c +++ b/njs/test/njs_unit_test.c @@ -6215,6 +6215,12 @@ static njs_unit_test_t njs_test[] = { nxt_string("Math.pow()"), nxt_string("NaN") }, + { nxt_string("Math.pow(1, NaN)"), + nxt_string("NaN") }, + + { nxt_string("Math.pow(3, NaN)"), + nxt_string("NaN") }, + { nxt_string("Math.pow('a', -0)"), nxt_string("1") }, -- 2.47.3