Title: [214651] branches/safari-603-branch/Source/WebKit2
Revision
214651
Author
jmarc...@apple.com
Date
2017-03-30 19:33:39 -0700 (Thu, 30 Mar 2017)

Log Message

Merge r214003. rdar://problem/31331131

Modified Paths

Diff

Modified: branches/safari-603-branch/Source/WebKit2/ChangeLog (214650 => 214651)


--- branches/safari-603-branch/Source/WebKit2/ChangeLog	2017-03-31 02:11:32 UTC (rev 214650)
+++ branches/safari-603-branch/Source/WebKit2/ChangeLog	2017-03-31 02:33:39 UTC (rev 214651)
@@ -1,3 +1,24 @@
+2017-03-30  Jason Marcell  <jmarc...@apple.com>
+
+        Merge r214003. rdar://problem/31331131
+
+    2017-03-15  Wenson Hsieh  <wenson_hs...@apple.com>
+
+            WebContent crash due to bad variant access in WebKit: WebKit::WebPage::expandedRangeFromHandle
+            https://bugs.webkit.org/show_bug.cgi?id=169657
+            <rdar://problem/30631070>
+
+            Reviewed by Tim Horton.
+
+            In WebPageIOS.mm, the call to unionDOMRanges from WebPage::expandedRangeFromHandle invokes
+            Range::compareBoundaryPoints, assuming that the return value is not an exception, and then attempts to perform
+            integer comparison on the result. This is one speculative cause of the web content crash in the radar.
+
+            There isn't a known way to reproduce this crash.
+
+            * WebProcess/WebPage/ios/WebPageIOS.mm:
+            (WebKit::unionDOMRanges):
+
 2017-03-20  Matthew Hanson  <matthew_han...@apple.com>
 
         Merge r213253. rdar://problem/30773140

Modified: branches/safari-603-branch/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (214650 => 214651)


--- branches/safari-603-branch/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm	2017-03-31 02:11:32 UTC (rev 214650)
+++ branches/safari-603-branch/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm	2017-03-31 02:33:39 UTC (rev 214651)
@@ -1265,9 +1265,17 @@
     if (!rangeA)
         return rangeB;
 
-    Range* start = rangeA->compareBoundaryPoints(Range::START_TO_START, *rangeB).releaseReturnValue() <= 0 ? rangeA : rangeB;
-    Range* end = rangeA->compareBoundaryPoints(Range::END_TO_END, *rangeB).releaseReturnValue() <= 0 ? rangeB : rangeA;
+    auto startToStartComparison = rangeA->compareBoundaryPoints(Range::START_TO_START, *rangeB);
+    if (startToStartComparison.hasException())
+        return nullptr;
 
+    auto endToEndComparison = rangeA->compareBoundaryPoints(Range::END_TO_END, *rangeB);
+    if (endToEndComparison.hasException())
+        return nullptr;
+
+    auto* start = startToStartComparison.releaseReturnValue() <= 0 ? rangeA : rangeB;
+    auto* end = endToEndComparison.releaseReturnValue() <= 0 ? rangeB : rangeA;
+
     return Range::create(rangeA->ownerDocument(), &start->startContainer(), start->startOffset(), &end->endContainer(), end->endOffset());
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to