[webkit-changes] [WebKit/WebKit] d15c4b: [Remote Inspection] Refactor ElementTargetingContr...
Wenson Hsieh
noreply at github.com
Tue Jul 30 16:19:05 PDT 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: d15c4b4addcad589c6dda36bc3bde03a78da1e10
https://github.com/WebKit/WebKit/commit/d15c4b4addcad589c6dda36bc3bde03a78da1e10
Author: Wenson Hsieh <wenson_hsieh at apple.com>
Date: 2024-07-30 (Tue, 30 Jul 2024)
Changed paths:
M Source/WebCore/page/ElementTargetingController.cpp
Log Message:
-----------
[Remote Inspection] Refactor ElementTargetingController to avoid a rare nullptr crash
https://bugs.webkit.org/show_bug.cgi?id=277371
rdar://132831879
Reviewed by Aditya Keerthi.
This is a speculative fix for a `nullptr` (or `CheckedPtr`) crash, due to the fact that `renderer`
is a `CheckedPtr` below:
```
CheckedPtr renderer = element.renderer();
…
return {
.elementIdentifier = element.identifier(),
.documentIdentifier = element.document().identifier(),
.offsetEdges = computeOffsetEdges(renderer->style()), // <--- A
.renderedText = WTFMove(renderedText),
.searchableText = searchableTextForTarget(element), // <--- B
.screenReaderText = WTFMove(screenReaderText),
.selectors = selectorsForTarget(element, cache),
.boundsInRootView = element.boundingBoxInRootViewCoordinates(),
.boundsInClientCoordinates = computeClientRect(*renderer), // <--- C
…
};
```
Because we may update layout in (B) (and rebuild parts of the render tree in the process), it's
possible for the renderer to become null by the time we get to line (C). To address this, we make
the `renderer` a `WeakPtr` and limit its lifetime to only code that accesses information from
`RenderStyle` and geometry information, without updating layout.
No new test case, since it only seemed to reproduce once.
* Source/WebCore/page/ElementTargetingController.cpp:
(WebCore::targetedElementInfo):
(WebCore::ElementTargetingController::extractTargets):
Canonical link: https://commits.webkit.org/281613@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list