From 51e23cd04303e6cd18987d90dec4cc032341b371 Mon Sep 17 00:00:00 2001 From: davidot Date: Fri, 26 Nov 2021 23:36:43 +0100 Subject: LibJS: Disallow shorthand properties with reserved names --- Userland/Libraries/LibJS/Parser.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'Userland/Libraries/LibJS/Parser.cpp') diff --git a/Userland/Libraries/LibJS/Parser.cpp b/Userland/Libraries/LibJS/Parser.cpp index 6a43b17824..c8f5690798 100644 --- a/Userland/Libraries/LibJS/Parser.cpp +++ b/Userland/Libraries/LibJS/Parser.cpp @@ -1497,6 +1497,8 @@ NonnullRefPtr Parser::parse_object_expression() auto lookahead_token = next_token(); if (lookahead_token.type() != TokenType::ParenOpen && lookahead_token.type() != TokenType::Colon + && lookahead_token.type() != TokenType::Comma && lookahead_token.type() != TokenType::CurlyClose + && lookahead_token.type() != TokenType::Async && !lookahead_token.trivia_contains_line_terminator()) { consume(TokenType::Async); function_kind = FunctionKind::Async; @@ -1567,6 +1569,12 @@ NonnullRefPtr Parser::parse_object_expression() } properties.append(create_ast_node({ m_state.current_token.filename(), rule_start.position(), position() }, *property_name, parse_expression(2), property_type, false)); } else if (property_name && property_value) { + if (m_state.strict_mode && is(*property_name)) { + auto& string_literal = static_cast(*property_name); + if (is_strict_reserved_word(string_literal.value())) + syntax_error(String::formatted("'{}' is a reserved keyword", string_literal.value())); + } + properties.append(create_ast_node({ m_state.current_token.filename(), rule_start.position(), position() }, *property_name, *property_value, property_type, false)); } else { expected("a property"); -- cgit v1.2.3