From 21b04d041dd63613da93f5efdb4a87cb5bb32341 Mon Sep 17 00:00:00 2001 From: midagedev Date: Thu, 20 Aug 2026 06:49:23 +0900 Subject: [PATCH 1/2] fix(v3/windows): don't kill the process when WebResourceRequested can't read the request MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GetRequest can fail at runtime, and can also return S_OK without setting the out pointer under load (#1103's crash trace shows the resulting Release on a nil request). Both cases now drop that one request and log, instead of log.Fatal — which exits without even reaching the application's error callback. Same class as the merged #5658/#5597 runtime-COM-error recoveries; this was the last remaining process-kill in the handler set. --- v3/UNRELEASED_CHANGELOG.md | 1 + v3/internal/webview2/pkg/edge/chromium.go | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/v3/UNRELEASED_CHANGELOG.md b/v3/UNRELEASED_CHANGELOG.md index 33638e7fc86..fe5b75f42e5 100644 --- a/v3/UNRELEASED_CHANGELOG.md +++ b/v3/UNRELEASED_CHANGELOG.md @@ -23,6 +23,7 @@ After processing, the content will be moved to the main changelog and this file ## Fixed +- Windows: a failed or nil `GetRequest` in the WebResourceRequested handler no longer kills the process (`log.Fatal` / nil-dereference panic) — the request is dropped and logged instead in [PR](https://github.com/wailsapp/wails/pull/6006) by @midagedev ## Deprecated diff --git a/v3/internal/webview2/pkg/edge/chromium.go b/v3/internal/webview2/pkg/edge/chromium.go index 947727fa1c0..f15c5814370 100644 --- a/v3/internal/webview2/pkg/edge/chromium.go +++ b/v3/internal/webview2/pkg/edge/chromium.go @@ -723,8 +723,12 @@ func (e *Chromium) PermissionRequested(_ *ICoreWebView2, args *iCoreWebView2Perm func (e *Chromium) WebResourceRequested(sender *ICoreWebView2, args *ICoreWebView2WebResourceRequestedEventArgs) uintptr { req, err := args.GetRequest() - if err != nil { - log.Fatal(err) + if err != nil || req == nil { + // COM can fail here under load without setting the out pointer + // (#1103). Dropping one request is recoverable (the WebView falls + // back to default handling for it); killing the process is not. + log.Printf("[WebView2] WebResourceRequested failed to get request: %v", err) + return 0 } defer req.Release() From c1e445f7cc3de7bf8b60d44313d7dc179d2e0f81 Mon Sep 17 00:00:00 2001 From: midagedev Date: Thu, 20 Aug 2026 07:17:56 +0900 Subject: [PATCH 2/2] fix(v3/windows): name the nil-request drop explicitly in the log --- v3/internal/webview2/pkg/edge/chromium.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/v3/internal/webview2/pkg/edge/chromium.go b/v3/internal/webview2/pkg/edge/chromium.go index f15c5814370..10e1e502f55 100644 --- a/v3/internal/webview2/pkg/edge/chromium.go +++ b/v3/internal/webview2/pkg/edge/chromium.go @@ -727,6 +727,9 @@ func (e *Chromium) WebResourceRequested(sender *ICoreWebView2, args *ICoreWebVie // COM can fail here under load without setting the out pointer // (#1103). Dropping one request is recoverable (the WebView falls // back to default handling for it); killing the process is not. + if err == nil { + err = errors.New("no error, but the request out pointer was not set (#1103)") + } log.Printf("[WebView2] WebResourceRequested failed to get request: %v", err) return 0 }