mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-25 17:10:23 +00:00
LibJS: Don't VERIFY that the token after 'import' is one of '.' and '('
Although those are the only valid options parse_primary_expression is sometimes called when only an expression is valid which means it did not check match_expression and might fail the now removed VERIFY.
This commit is contained in:
parent
56c425eec1
commit
e179cf2540
Notes:
sideshowbarker
2024-07-17 21:58:55 +09:00
Author: https://github.com/davidot Commit: https://github.com/SerenityOS/serenity/commit/e179cf25405 Pull-request: https://github.com/SerenityOS/serenity/pull/11478 Reviewed-by: https://github.com/linusg
2 changed files with 27 additions and 5 deletions
|
@ -1425,14 +1425,18 @@ Parser::PrimaryExpressionParseResult Parser::parse_primary_expression()
|
|||
}
|
||||
case TokenType::Import: {
|
||||
auto lookahead_token = next_token();
|
||||
VERIFY(lookahead_token.type() == TokenType::Period || lookahead_token.type() == TokenType::ParenOpen);
|
||||
if (lookahead_token.type() == TokenType::ParenOpen)
|
||||
return { parse_import_call() };
|
||||
|
||||
if (auto import_meta = try_parse_import_meta_expression()) {
|
||||
if (m_program_type != Program::Type::Module)
|
||||
syntax_error("import.meta is only allowed in modules");
|
||||
return { import_meta.release_nonnull() };
|
||||
if (lookahead_token.type() == TokenType::Period) {
|
||||
if (auto import_meta = try_parse_import_meta_expression()) {
|
||||
if (m_program_type != Program::Type::Module)
|
||||
syntax_error("import.meta is only allowed in modules");
|
||||
return { import_meta.release_nonnull() };
|
||||
}
|
||||
} else {
|
||||
consume();
|
||||
expected("import.meta or import call");
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
describe("parsing", () => {
|
||||
test("can parse call import call", () => {
|
||||
expect("import('a')").toEval();
|
||||
expect("import('a', )").toEval();
|
||||
expect("import('a', {options: true})").toEval();
|
||||
});
|
||||
|
||||
test("does not crash on unexpected tokens after import", () => {
|
||||
expect("f = import('a')").toEval();
|
||||
|
||||
expect("f= import").not.toEval();
|
||||
expect("f= import;").not.toEval();
|
||||
expect("f= import?").not.toEval();
|
||||
expect("f= import'").not.toEval();
|
||||
expect("f= import 'a'").not.toEval();
|
||||
expect("f= import['a']").not.toEval();
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue