Skip to content

Commit 521c0f8

Browse files
committed
Fix a potential segfault on log message for failing to load module
Using the `call_arena` here is unsafe in the case of a failure. It's possible for the call_arena to be reset during module processing, making the log crash. The issue is that the lifetime of a URL is often conditional. If the stitched URL has already been seen (i.e. is in the module_cache), then it can be short- lived. EXCEPT, URL.stitch might require an allocation..and then you start to think, well, if URL.stitch is going to allocate anyways...If we stitch with the `page.arena`, and end up not needing a long lifetime, we've wasted memory. If we stitch with `page.call_arena` and end up needing a long lifetime, we need to dupe. It's a bit messy, and I'd like to take a stab at improving it after: #1127. I'm thinking that we need a URL intern pool. HashMap with a composite key of base + path -> resolved. Then all URLs are resolved using the page.arena, but we don't have any duplicates, so it isn't wasteful.
1 parent 4bfe3b6 commit 521c0f8

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

src/browser/js/Context.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1171,7 +1171,7 @@ fn _resolveModuleCallback(self: *Context, referrer: v8.Module, specifier: []cons
11711171
};
11721172

11731173
const normalized_specifier = try self.script_manager.?.resolveSpecifier(
1174-
self.call_arena,
1174+
self.arena, // might need to survive until the module is loaded
11751175
specifier,
11761176
referrer_path,
11771177
);

0 commit comments

Comments
 (0)