From 42f2ded9000a8eb72f13ee936ede482e9ef42837 Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Wed, 4 Dec 2019 18:34:29 -0800 Subject: [PATCH] Fabric: Returning zero size on attempt to measure an empty string in RCTTextLayoutManager Summary: Sometimes, very irregularly, measuring an empty string crashes/freezes iOS internal text infrastructure. This is our last line of defense. Changelog: [Internal] Fabric-specific internal change. Reviewed By: sammy-SC, mdvacca Differential Revision: D18802308 fbshipit-source-id: addf523b31b78b0777be7eeaeee140ac8416393b --- .../textlayoutmanager/platform/ios/RCTTextLayoutManager.mm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ReactCommon/fabric/textlayoutmanager/platform/ios/RCTTextLayoutManager.mm b/ReactCommon/fabric/textlayoutmanager/platform/ios/RCTTextLayoutManager.mm index b36571fe618..db1ebc1cf03 100644 --- a/ReactCommon/fabric/textlayoutmanager/platform/ios/RCTTextLayoutManager.mm +++ b/ReactCommon/fabric/textlayoutmanager/platform/ios/RCTTextLayoutManager.mm @@ -36,6 +36,13 @@ static NSLineBreakMode RCTNSLineBreakModeFromEllipsizeMode(EllipsizeMode ellipsi paragraphAttributes:(ParagraphAttributes)paragraphAttributes layoutConstraints:(LayoutConstraints)layoutConstraints { + if (attributedString.length == 0) { + // This is not really an optimization because that should be checked much earlier on the call stack. + // Sometimes, very irregularly, measuring an empty string crashes/freezes iOS internal text infrastructure. + // This is our last line of defense. + return layoutConstraints.clamp({0, 0}); + } + CGSize maximumSize = CGSize{layoutConstraints.maximumSize.width, layoutConstraints.maximumSize.height}; NSTextStorage *textStorage = [self _textStorageAndLayoutManagerWithAttributesString:attributedString