diff --git a/Libraries/LibJS/Tests/numeric-literals-basic.js b/Libraries/LibJS/Tests/numeric-literals-basic.js index f226581320..b4b9f75181 100644 --- a/Libraries/LibJS/Tests/numeric-literals-basic.js +++ b/Libraries/LibJS/Tests/numeric-literals-basic.js @@ -10,6 +10,7 @@ test("octal literals", () => { expect(0o10).toBe(8); expect(0o10).toBe(8); expect(010).toBe(8); + expect(089).toBe(89); }); test("binary literals", () => { diff --git a/Libraries/LibJS/Token.cpp b/Libraries/LibJS/Token.cpp index 082e8ac9aa..2826f7fbf6 100644 --- a/Libraries/LibJS/Token.cpp +++ b/Libraries/LibJS/Token.cpp @@ -86,7 +86,8 @@ double Token::double_value() const return static_cast(strtoul(value_string.characters() + 2, nullptr, 2)); } else if (isdigit(value_string[1])) { // also octal, but syntax error in strict mode - return static_cast(strtoul(value_string.characters() + 1, nullptr, 8)); + if (!m_value.contains('8') && !m_value.contains('9')) + return static_cast(strtoul(value_string.characters() + 1, nullptr, 8)); } } return strtod(value_string.characters(), nullptr);