From de42ddfd93410e755ad033c9e3d39bec383b7320 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Wed, 13 May 2020 00:28:42 +0100 Subject: [PATCH] LibJS: Trim whitespace from string before coercing to number --- Libraries/LibJS/Runtime/Value.cpp | 3 +-- Libraries/LibJS/Tests/to-number-basic.js | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Libraries/LibJS/Runtime/Value.cpp b/Libraries/LibJS/Runtime/Value.cpp index 78c42dee5d..8607423873 100644 --- a/Libraries/LibJS/Runtime/Value.cpp +++ b/Libraries/LibJS/Runtime/Value.cpp @@ -165,8 +165,7 @@ Value Value::to_number() const case Type::Number: return Value(m_value.as_double); case Type::String: { - // FIXME: Trim whitespace beforehand - auto& string = as_string().string(); + auto string = as_string().string().trim_whitespace(); if (string.is_empty()) return Value(0); if (string == "Infinity" || string == "+Infinity") diff --git a/Libraries/LibJS/Tests/to-number-basic.js b/Libraries/LibJS/Tests/to-number-basic.js index 9a447fae32..f4659bea0d 100644 --- a/Libraries/LibJS/Tests/to-number-basic.js +++ b/Libraries/LibJS/Tests/to-number-basic.js @@ -35,6 +35,9 @@ try { assert(-"Infinity" === -Infinity); assert(-"+Infinity" === -Infinity); assert(-"-Infinity" === Infinity); + assert(+" \r \t \n " === 0); + assert(+" \n \t Infinity \r " === Infinity); + assert(+"\r \n1.23 \t\t\t \n" === 1.23); assert(isNaN(+undefined)); assert(isNaN(-undefined));