LibWeb: Ensure an ESO is pushed before doing structured deserialization

We need to make sure that the given target realm is at the top of the
VM's execution context stack before doing any JS object construction
based on the data in our serialized buffer.
This commit is contained in:
Andrew Kaster 2023-09-27 22:36:50 -06:00 committed by Alexander Kalenik
parent 9f6841a65c
commit 2c27b4e63c
Notes: sideshowbarker 2024-07-17 03:35:16 +09:00

View File

@ -1142,8 +1142,16 @@ WebIDL::ExceptionOr<JS::Value> structured_deserialize(JS::VM& vm, SerializationR
if (!memory.has_value())
memory = DeserializationMemory { vm.heap() };
// IMPLEMENTATION DEFINED: We need to make sure there's an execution context for target_realm on the stack before constructing these JS objects
auto& target_settings = Bindings::host_defined_environment_settings_object(target_realm);
target_settings.prepare_to_run_script();
Deserializer deserializer(vm, target_realm, serialized.span(), *memory);
return deserializer.deserialize();
auto result = deserializer.deserialize();
target_settings.clean_up_after_running_script();
return result;
}
}