CrashTracer: Regression : MobileSafari at UIKit: -[CALayerAccessibility__UIKit__Quart...
authordino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 11 Jul 2019 20:11:47 +0000 (20:11 +0000)
committerdino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 11 Jul 2019 20:11:47 +0000 (20:11 +0000)
https://bugs.webkit.org/show_bug.cgi?id=199720
<rdar://problem/51470469>

Reviewed by Tim Horton.

Speculative fix after confirming that this crash can occur when
a zero width/height view is used for a UITargetedPreview. We
already guarded against this in the default flow, but not in
the fallback path where we take a view snapshot.

* UIProcess/ios/WKContentViewInteraction.mm:
(createFallbackTargetedPreview): Return early if rectangles are empty.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@247360 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm

index ad1a93b..02c4abf 100644 (file)
@@ -1,3 +1,19 @@
+2019-07-11  Dean Jackson  <dino@apple.com>
+
+        CrashTracer: Regression : MobileSafari at UIKit: -[CALayerAccessibility__UIKit__QuartzCore setBounds:]
+        https://bugs.webkit.org/show_bug.cgi?id=199720
+        <rdar://problem/51470469>
+
+        Reviewed by Tim Horton.
+
+        Speculative fix after confirming that this crash can occur when
+        a zero width/height view is used for a UITargetedPreview. We
+        already guarded against this in the default flow, but not in
+        the fallback path where we take a view snapshot.
+
+        * UIProcess/ios/WKContentViewInteraction.mm:
+        (createFallbackTargetedPreview): Return early if rectangles are empty.
+
 2019-07-11  Alex Christensen  <achristensen@webkit.org>
 
         Use mobile UA on jsfiddle.net
index 2cad081..224ed41 100644 (file)
@@ -8009,10 +8009,17 @@ static RetainPtr<UITargetedPreview> createFallbackTargetedPreview(UIView *rootVi
     if (!containerView.window)
         return nil;
 
+    if (frameInRootViewCoordinates.isEmpty())
+        return nil;
+
     auto parameters = adoptNS([[UIPreviewParameters alloc] init]);
     UIView *snapshotView = [rootView resizableSnapshotViewFromRect:frameInRootViewCoordinates afterScreenUpdates:NO withCapInsets:UIEdgeInsetsZero];
 
     CGRect frameInContainerViewCoordinates = [rootView convertRect:frameInRootViewCoordinates toView:containerView];
+
+    if (CGRectIsEmpty(frameInContainerViewCoordinates))
+        return nil;
+
     snapshotView.frame = frameInContainerViewCoordinates;
 
     CGPoint centerInContainerViewCoordinates = CGPointMake(CGRectGetMidX(frameInContainerViewCoordinates), CGRectGetMidY(frameInContainerViewCoordinates));