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

LibJS: Do not execute scripts with parse errors

This adds missing checks in several LibJS consumers.
This commit is contained in:
Stephan Unverwerth 2020-04-13 02:05:21 +02:00 committed by Andreas Kling
parent 50b6b6ef86
commit 984c290ec0
4 changed files with 36 additions and 7 deletions

View file

@ -328,9 +328,14 @@ JS::Value ReplObject::load_file(JS::Interpreter& interpreter)
} else {
source = file_contents;
}
auto program = JS::Parser(JS::Lexer(source)).parse_program();
auto parser = JS::Parser(JS::Lexer(source));
auto program = parser.parse_program();
if (dump_ast)
program->dump(0);
if (parser.has_errors())
continue;
interpreter.run(*program);
if (print_last_result)
print(interpreter.last_value());
@ -345,10 +350,16 @@ void repl(JS::Interpreter& interpreter)
if (piece.is_empty())
continue;
repl_statements.append(piece);
auto program = JS::Parser(JS::Lexer(piece)).parse_program();
auto parser = JS::Parser(JS::Lexer(piece));
auto program = parser.parse_program();
if (dump_ast)
program->dump(0);
if (parser.has_errors()) {
printf("Parse error\n");
continue;
}
interpreter.run(*program);
if (interpreter.exception()) {
printf("Uncaught exception: ");
@ -634,11 +645,17 @@ int main(int argc, char** argv)
} else {
source = file_contents;
}
auto program = JS::Parser(JS::Lexer(source)).parse_program();
auto parser = JS::Parser(JS::Lexer(source));
auto program = parser.parse_program();
if (dump_ast)
program->dump(0);
if (parser.has_errors()) {
printf("Parse Error\n");
return 1;
}
auto result = interpreter->run(*program);
if (interpreter->exception()) {