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..10e1e502f55 100644 --- a/v3/internal/webview2/pkg/edge/chromium.go +++ b/v3/internal/webview2/pkg/edge/chromium.go @@ -723,8 +723,15 @@ 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. + 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 } defer req.Release()