LibJS/Bytecode: Do a stack check when entering run_bytecode()

If we don't have enough stack space, throw an exception while we still
can, and give the caller a chance to recover.

This particular problem will go away once we make calls non-recursive.
This commit is contained in:
Andreas Kling 2024-05-07 07:50:19 +02:00
parent ebe6ec6069
commit a020a0779d
Notes: sideshowbarker 2024-07-17 05:05:51 +09:00

View file

@ -339,6 +339,11 @@ Interpreter::HandleExceptionResponse Interpreter::handle_exception(size_t& progr
FLATTEN_ON_CLANG void Interpreter::run_bytecode(size_t entry_point)
{
if (vm().did_reach_stack_space_limit()) {
reg(Register::exception()) = vm().throw_completion<InternalError>(ErrorType::CallStackSizeExceeded).release_value().value();
return;
}
auto& running_execution_context = vm().running_execution_context();
auto* locals = running_execution_context.locals.data();
auto& accumulator = this->accumulator();