Skip to content

fix(issue-62): prevent desktop WKWebView use-after-free crash with de… - #64

Open
martinkade wants to merge 1 commit into
NucleusFramework:mainfrom
martinkade:fix/macOS-nativeSetSubviewFrame-nativePresentWithInterop-crash
Open

martinkade wants to merge 1 commit into
NucleusFramework:mainfrom
martinkade:fix/macOS-nativeSetSubviewFrame-nativePresentWithInterop-crash

Conversation

@martinkade

Copy link
Copy Markdown

…layed view retirement and add L10 churn test

The fix

  1. view_lifecycle.m — the actual fix. nativeGetNsView hands Nucleus the WKWebView itself as the embedded NSView, and teardown dropped the last strong reference to it. It now stops the page, unparents it and clears delegates immediately, but hands the last reference to a retire list that releases it one second later on the main queue. A late nativeSetSubviewFrame then lands on an inert but live object.

  2. WebViewDesktop.kt:323 — a second ordering bug the logs couldn't show. Compose forgets effects in reverse registration order, and the destroy() effect was registered last, so it freed the handle before NativeView's own detach ran nativeRemoveSubview on it. Moving the effect above the NativeView call inverts that to detach-then-release.

  3. SuiteRunner.kt:720 — new case L10, a churn pane that mounts a second real WebView, resizes it every frame via withFrameNanos, and unmounts it 12 times with jittered delays.

Verification
All 71 cases pass (SUITE_FINISHED passed=true), plus :webview-compose:jvmTest and an e2e-shared compile for wasmJs/iOS/Android. I did not run the Android/iOS/Wasm suites or the Linux/Windows desktop legs — CI covers those.

…layed view retirement and add L10 churn test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant