From d18acd5228a29fd01bef5b7b4c90454745c88f92 Mon Sep 17 00:00:00 2001 From: Muki Kiboigo Date: Wed, 1 Apr 2026 14:12:25 -0700 Subject: [PATCH] fix crashes on cached file from script manager --- src/browser/ScriptManager.zig | 42 +++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/src/browser/ScriptManager.zig b/src/browser/ScriptManager.zig index 4bd4148c..c7901e9e 100644 --- a/src/browser/ScriptManager.zig +++ b/src/browser/ScriptManager.zig @@ -273,23 +273,31 @@ pub fn addFromElement(self: *ScriptManager, comptime from_parser: bool, script_e // Let the outer errdefer handle releasing the arena if client.request fails } - try self.client.request(.{ - .url = url, - .ctx = script, - .method = .GET, - .frame_id = page._frame_id, - .headers = try self.getHeaders(), - .blocking = is_blocking, - .cookie_jar = &page._session.cookie_jar, - .cookie_origin = page.url, - .resource_type = .script, - .notification = page._session.notification, - .start_callback = if (log.enabled(.http, .debug)) Script.startCallback else null, - .header_callback = Script.headerCallback, - .data_callback = Script.dataCallback, - .done_callback = Script.doneCallback, - .error_callback = Script.errorCallback, - }); + // If we return synchronously (like from cache), we would call evaluate() immediately. + { + const was_evaluating = self.is_evaluating; + self.is_evaluating = true; + defer self.is_evaluating = was_evaluating; + + try self.client.request(.{ + .url = url, + .ctx = script, + .method = .GET, + .frame_id = page._frame_id, + .headers = try self.getHeaders(), + .blocking = is_blocking, + .cookie_jar = &page._session.cookie_jar, + .cookie_origin = page.url, + .resource_type = .script, + .notification = page._session.notification, + .start_callback = if (log.enabled(.http, .debug)) Script.startCallback else null, + .header_callback = Script.headerCallback, + .data_callback = Script.dataCallback, + .done_callback = Script.doneCallback, + .error_callback = Script.errorCallback, + }); + } + handover = true; if (comptime IS_DEBUG) {