Skip to content

Commit

Permalink
Fabric: Fixed crash in `[RCTParagraphComponentView accessibilityEleme…
Browse files Browse the repository at this point in the history
…nts]`

Summary:
Now we check for `_state` being nullptr before dereferencing this.

`accessibilityElements` (as a bunch of other methods that have the same check) can be called by OS any moment (we cannot predict when), so at some very rare moments, it can be called when the view is not fully initialized yet. To prevent crashing we just need to return some default value indicating that the view is empty.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D24095654

fbshipit-source-id: d8a37f269c5bf7718acb0b512e7a9313e199398e
  • Loading branch information
shergin authored and facebook-github-bot committed Oct 5, 2020
1 parent 03e120d commit 7c83eab
Showing 1 changed file with 13 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -141,16 +141,21 @@ - (NSString *)accessibilityLabel

- (NSArray *)accessibilityElements
{
if (![_accessibilityProvider isUpToDate:_state->getData().attributedString]) {
if (!_state) {
return [NSArray new];
}

auto &data = _state->getData();

if (![_accessibilityProvider isUpToDate:data.attributedString]) {
RCTTextLayoutManager *textLayoutManager =
(RCTTextLayoutManager *)unwrapManagedObject(_state->getData().layoutManager->getNativeTextLayoutManager());
(RCTTextLayoutManager *)unwrapManagedObject(data.layoutManager->getNativeTextLayoutManager());
CGRect frame = RCTCGRectFromRect(_layoutMetrics.getContentFrame());
_accessibilityProvider =
[[RCTParagraphComponentAccessibilityProvider alloc] initWithString:_state->getData().attributedString
layoutManager:textLayoutManager
paragraphAttributes:_state->getData().paragraphAttributes
frame:frame
view:self];
_accessibilityProvider = [[RCTParagraphComponentAccessibilityProvider alloc] initWithString:data.attributedString
layoutManager:textLayoutManager
paragraphAttributes:data.paragraphAttributes
frame:frame
view:self];
}

self.isAccessibilityElement = NO;
Expand Down

0 comments on commit 7c83eab

Please sign in to comment.