1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:17:44 +00:00

LibJS: Tighten default values in formal parameter parsing

Disallow default parameter for rest parameters.
Disallow yield expressions as default values.
This commit is contained in:
davidot 2021-07-29 01:47:36 +02:00 committed by Linus Groh
parent 4989e79c45
commit f1f338edcd

View file

@ -1891,6 +1891,10 @@ Vector<FunctionNode::Parameter> Parser::parse_formal_parameters(int& function_le
RefPtr<Expression> default_value;
if (match(TokenType::Equals)) {
consume();
if (is_rest)
syntax_error("Rest parameter may not have a default initializer");
TemporaryChange change(m_state.in_function_context, true);
has_default_parameter = true;
function_length = parameters.size();
@ -1899,6 +1903,8 @@ Vector<FunctionNode::Parameter> Parser::parse_formal_parameters(int& function_le
bool is_generator = parse_options & FunctionNodeParseOptions::IsGeneratorFunction;
if ((is_generator || m_state.strict_mode) && default_value && default_value->fast_is<Identifier>() && static_cast<Identifier&>(*default_value).string() == "yield"sv)
syntax_error("Generator function parameter initializer cannot contain a reference to an identifier named \"yield\"");
if (default_value && is<YieldExpression>(*default_value))
syntax_error("Yield expression not allowed in formal parameter");
}
parameters.append({ move(parameter), default_value, is_rest });
if (match(TokenType::ParenClose))