diff options
-rw-r--r-- | Libraries/LibJS/Runtime/Value.cpp | 4 | ||||
-rw-r--r-- | Libraries/LibJS/Tests/String.prototype.charAt.js | 5 |
2 files changed, 9 insertions, 0 deletions
diff --git a/Libraries/LibJS/Runtime/Value.cpp b/Libraries/LibJS/Runtime/Value.cpp index 80917df5d5..9f248829a3 100644 --- a/Libraries/LibJS/Runtime/Value.cpp +++ b/Libraries/LibJS/Runtime/Value.cpp @@ -274,6 +274,10 @@ i32 Value::to_i32(Interpreter& interpreter) const auto number = to_number(interpreter); if (interpreter.exception()) return 0; + if (number.is_nan()) + return 0; + // FIXME: What about infinity though - that's UB... + // Maybe NumericLimits<i32>::max() for +Infinity and NumericLimits<i32>::min() for -Infinity? return number.as_i32(); } diff --git a/Libraries/LibJS/Tests/String.prototype.charAt.js b/Libraries/LibJS/Tests/String.prototype.charAt.js index 9e9fbd96b4..234d388003 100644 --- a/Libraries/LibJS/Tests/String.prototype.charAt.js +++ b/Libraries/LibJS/Tests/String.prototype.charAt.js @@ -13,6 +13,11 @@ try { assert(s.charAt(5) === 'r'); assert(s.charAt(6) === ''); + assert(s.charAt() === 'f'); + assert(s.charAt(NaN) === 'f'); + assert(s.charAt("foo") === 'f'); + assert(s.charAt(undefined) === 'f'); + console.log("PASS"); } catch (e) { console.log("FAIL: " + e); |