From 3ac7fb9f6cda300df1523bdf3eb0499a727834df Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Sat, 28 Nov 2020 19:17:33 +0000 Subject: [PATCH] LibJS: Disallow 'with' statement in strict mode --- Libraries/LibJS/Parser.cpp | 2 ++ Libraries/LibJS/Tests/with-basic.js | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/Libraries/LibJS/Parser.cpp b/Libraries/LibJS/Parser.cpp index 1596e64651..457e189011 100644 --- a/Libraries/LibJS/Parser.cpp +++ b/Libraries/LibJS/Parser.cpp @@ -328,6 +328,8 @@ NonnullRefPtr Parser::parse_statement() case TokenType::While: return parse_while_statement(); case TokenType::With: + if (m_parser_state.m_strict_mode) + syntax_error("'with' statement not allowed in strict mode"); return parse_with_statement(); case TokenType::Debugger: return parse_debugger_statement(); diff --git a/Libraries/LibJS/Tests/with-basic.js b/Libraries/LibJS/Tests/with-basic.js index a5bdbf4e41..a1029ef621 100644 --- a/Libraries/LibJS/Tests/with-basic.js +++ b/Libraries/LibJS/Tests/with-basic.js @@ -18,3 +18,7 @@ test("basic with statement functionality", () => { expect(bar).toBe(99); }); + +test("syntax error in strict mode", () => { + expect("'use strict'; with (foo) {}").not.toEval(); +});