Skip to content

Commit 662de14

Browse files
committed
Fix use-after-free in WebContentsAdapter::load
Pass WebContentsAdapter pointer to lambda via QWeakPointer in case the adapter has been deleted already. Fixes: QTBUG-76958 Change-Id: I1962ba3dd1794a27e7013a2ad1b729fe7a08c079 Reviewed-by: Allan Sandfeld Jensen <[email protected]>
1 parent b4589db commit 662de14

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/core/web_contents_adapter.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -653,19 +653,23 @@ void WebContentsAdapter::load(const QWebEngineHttpRequest &request)
653653
}
654654
}
655655

656-
auto navigate = [](WebContentsAdapter *adapter, const content::NavigationController::LoadURLParams &params) {
656+
auto navigate = [](QWeakPointer<WebContentsAdapter> weakAdapter, const content::NavigationController::LoadURLParams &params) {
657+
WebContentsAdapter *adapter = weakAdapter.data();
658+
if (!adapter)
659+
return;
657660
adapter->webContents()->GetController().LoadURLWithParams(params);
658661
// Follow chrome::Navigate and invalidate the URL immediately.
659662
adapter->m_webContentsDelegate->NavigationStateChanged(adapter->webContents(), content::INVALIDATE_TYPE_URL);
660663
adapter->focusIfNecessary();
661664
};
662665

666+
QWeakPointer<WebContentsAdapter> weakThis(sharedFromThis());
663667
if (resizeNeeded) {
664668
// Schedule navigation on the event loop.
665669
content::BrowserThread::PostTask(
666-
content::BrowserThread::UI, FROM_HERE, base::BindOnce(navigate, this, std::move(params)));
670+
content::BrowserThread::UI, FROM_HERE, base::BindOnce(navigate, std::move(weakThis), std::move(params)));
667671
} else {
668-
navigate(this, params);
672+
navigate(std::move(weakThis), params);
669673
}
670674
}
671675

0 commit comments

Comments
 (0)