From a6263150be9b2719105dd9b4df3fedc2dca3d9a4 Mon Sep 17 00:00:00 2001 From: davidot Date: Mon, 12 Jul 2021 01:32:24 +0200 Subject: [PATCH] LibJS: Disallow unqualified deletes in strict mode --- Userland/Libraries/LibJS/Parser.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibJS/Parser.cpp b/Userland/Libraries/LibJS/Parser.cpp index 3b312146dc..7018375c5e 100644 --- a/Userland/Libraries/LibJS/Parser.cpp +++ b/Userland/Libraries/LibJS/Parser.cpp @@ -923,9 +923,15 @@ NonnullRefPtr Parser::parse_unary_prefixed_expression() case TokenType::Void: consume(); return create_ast_node({ m_state.current_token.filename(), rule_start.position(), position() }, UnaryOp::Void, parse_expression(precedence, associativity)); - case TokenType::Delete: + case TokenType::Delete: { consume(); - return create_ast_node({ m_state.current_token.filename(), rule_start.position(), position() }, UnaryOp::Delete, parse_expression(precedence, associativity)); + auto rhs_start = position(); + auto rhs = parse_expression(precedence, associativity); + if (is(*rhs) && m_state.strict_mode) { + syntax_error("Delete of an unqualified identifier in strict mode.", rhs_start); + } + return create_ast_node({ m_state.current_token.filename(), rule_start.position(), position() }, UnaryOp::Delete, move(rhs)); + } default: expected("primary expression"); consume();