mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-26 22:38:51 +00:00
LibWeb: Push the realm execution context before linking modules
This patch adds a non standard step pushing the realm execution context of fetching client's settings object onto the execution context stack before linking a module script. Without the realm execution context there is no current settings object, leading to a crash in HostResolveImportedModule.
This commit is contained in:
parent
f92d95224e
commit
a182bc9806
Notes:
sideshowbarker
2024-07-18 03:23:00 +09:00
Author: https://github.com/networkException
Commit: a182bc9806
Pull-request: https://github.com/SerenityOS/serenity/pull/15275
Reviewed-by: https://github.com/davidot ✅
Reviewed-by: https://github.com/linusg
1 changed files with 7 additions and 1 deletions
|
@ -309,7 +309,7 @@ void fetch_descendants_of_and_link_a_module_script(JavaScriptModuleScript const&
|
|||
// 1. Fetch the descendants of module script, given fetch client settings object, destination, visited set, and onFetchDescendantsComplete as defined below.
|
||||
// If performFetch was given, pass it along as well.
|
||||
// FIXME: Pass performFetch if given.
|
||||
fetch_descendants_of_a_module_script(module_script, fetch_client_settings_object, destination, visited_set, [on_complete = move(on_complete)](JavaScriptModuleScript const* result) {
|
||||
fetch_descendants_of_a_module_script(module_script, fetch_client_settings_object, destination, visited_set, [&fetch_client_settings_object, on_complete = move(on_complete)](JavaScriptModuleScript const* result) {
|
||||
// onFetchDescendantsComplete given result is the following algorithm:
|
||||
// 1. If result is null, then run onComplete given result, and abort these steps.
|
||||
if (!result) {
|
||||
|
@ -324,9 +324,15 @@ void fetch_descendants_of_and_link_a_module_script(JavaScriptModuleScript const&
|
|||
// 1. Let record be result's record.
|
||||
auto const& record = *result->record();
|
||||
|
||||
// NOTE: Although the spec does not say this we have to have a proper execution context when linking so we modify the stack here.
|
||||
// FIXME: Determine whether we are missing something from the spec or the spec is missing this step.
|
||||
fetch_client_settings_object.realm().vm().push_execution_context(fetch_client_settings_object.realm_execution_context());
|
||||
|
||||
// 2. Perform record.Link().
|
||||
auto linking_result = const_cast<JS::SourceTextModule&>(record).link(result->vm());
|
||||
|
||||
fetch_client_settings_object.realm().vm().pop_execution_context();
|
||||
|
||||
// TODO: If this throws an exception, set result's error to rethrow to that exception.
|
||||
if (linking_result.is_error())
|
||||
TODO();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue