Title: [226105] releases/WebKitGTK/webkit-2.18
Revision
226105
Author
carlo...@webkit.org
Date
2017-12-18 23:50:23 -0800 (Mon, 18 Dec 2017)

Log Message

Merge r225719 - Document::updateLayout() could destroy current frame.
https://bugs.webkit.org/show_bug.cgi?id=180525
<rdar://problem/35906836>

Reviewed by Simon Fraser.

Source/WebCore:

Early return when Document::updateLayout() triggers Frame destruction.

Test: fast/frames/crash-when-iframe-is-remove-in-eventhandler.html

* dom/TreeScope.cpp:
(WebCore::absolutePointIfNotClipped):

LayoutTests:

* fast/frames/crash-when-iframe-is-remove-in-eventhandler-expected.txt: Added.
* fast/frames/crash-when-iframe-is-remove-in-eventhandler.html: Added.

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.18/LayoutTests/ChangeLog (226104 => 226105)


--- releases/WebKitGTK/webkit-2.18/LayoutTests/ChangeLog	2017-12-19 07:48:30 UTC (rev 226104)
+++ releases/WebKitGTK/webkit-2.18/LayoutTests/ChangeLog	2017-12-19 07:50:23 UTC (rev 226105)
@@ -1,3 +1,14 @@
+2017-12-08  Zalan Bujtas  <za...@apple.com>
+
+        Document::updateLayout() could destroy current frame.
+        https://bugs.webkit.org/show_bug.cgi?id=180525
+        <rdar://problem/35906836>
+
+        Reviewed by Simon Fraser.
+
+        * fast/frames/crash-when-iframe-is-remove-in-eventhandler-expected.txt: Added.
+        * fast/frames/crash-when-iframe-is-remove-in-eventhandler.html: Added.
+
 2017-11-30  Alex Christensen  <achristen...@webkit.org>
 
         Extra PerformanceEntryList entry after iframe navigation

Added: releases/WebKitGTK/webkit-2.18/LayoutTests/fast/frames/crash-when-iframe-is-remove-in-eventhandler-expected.txt (0 => 226105)


--- releases/WebKitGTK/webkit-2.18/LayoutTests/fast/frames/crash-when-iframe-is-remove-in-eventhandler-expected.txt	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.18/LayoutTests/fast/frames/crash-when-iframe-is-remove-in-eventhandler-expected.txt	2017-12-19 07:50:23 UTC (rev 226105)
@@ -0,0 +1 @@
+PASS if no crash.  

Added: releases/WebKitGTK/webkit-2.18/LayoutTests/fast/frames/crash-when-iframe-is-remove-in-eventhandler.html (0 => 226105)


--- releases/WebKitGTK/webkit-2.18/LayoutTests/fast/frames/crash-when-iframe-is-remove-in-eventhandler.html	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.18/LayoutTests/fast/frames/crash-when-iframe-is-remove-in-eventhandler.html	2017-12-19 07:50:23 UTC (rev 226105)
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<body>
+PASS if no crash.
+<span id=span></span>
+<span id=wrapper></span>
+<textarea id=textarea _onfocus_="eventhandler()"></textarea>
+<script>
+if (window.testRunner)
+    testRunner.dumpAsText();
+document.offsetHeight;
+textarea.autofocus = true;
+var iframe = document.createElement("iframe");
+span.appendChild(iframe);
+wrapper.appendChild(textarea);
+iframe.contentDocument.caretRangeFromPoint();
+
+function eventhandler() {
+    textarea.insertAdjacentElement("beforeBegin", span);
+}
+</script>
+</body>
+</html>

Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog (226104 => 226105)


--- releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog	2017-12-19 07:48:30 UTC (rev 226104)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog	2017-12-19 07:50:23 UTC (rev 226105)
@@ -1,3 +1,18 @@
+2017-12-08  Zalan Bujtas  <za...@apple.com>
+
+        Document::updateLayout() could destroy current frame.
+        https://bugs.webkit.org/show_bug.cgi?id=180525
+        <rdar://problem/35906836>
+
+        Reviewed by Simon Fraser.
+
+        Early return when Document::updateLayout() triggers Frame destruction.
+
+        Test: fast/frames/crash-when-iframe-is-remove-in-eventhandler.html
+
+        * dom/TreeScope.cpp:
+        (WebCore::absolutePointIfNotClipped):
+
 2017-12-05  Alex Christensen  <achristen...@webkit.org>
 
         Fix non-unified build after r225381

Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/dom/TreeScope.cpp (226104 => 226105)


--- releases/WebKitGTK/webkit-2.18/Source/WebCore/dom/TreeScope.cpp	2017-12-19 07:48:30 UTC (rev 226104)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/dom/TreeScope.cpp	2017-12-19 07:50:23 UTC (rev 226105)
@@ -298,13 +298,14 @@
 
 static std::optional<LayoutPoint> absolutePointIfNotClipped(Document& document, const LayoutPoint& clientPoint)
 {
-    auto* frame = document.frame();
-    auto* view = document.view();
-    if (!frame || !view)
+    if (!document.frame() || !document.view())
         return std::nullopt;
 
-    if (frame->settings().visualViewportEnabled()) {
+    if (document.frame()->settings().visualViewportEnabled()) {
         document.updateLayout();
+        if (!document.view() || !document.hasLivingRenderTree())
+            return std::nullopt;
+        auto* view = document.view();
         FloatPoint layoutViewportPoint = view->clientToLayoutViewportPoint(clientPoint);
         FloatRect layoutViewportBounds({ }, view->layoutViewportRect().size());
         if (!layoutViewportBounds.contains(layoutViewportPoint))
@@ -312,6 +313,8 @@
         return LayoutPoint(view->layoutViewportToAbsolutePoint(layoutViewportPoint));
     }
 
+    auto* frame = document.frame();
+    auto* view = document.view();
     float scaleFactor = frame->pageZoomFactor() * frame->frameScaleFactor();
 
     LayoutPoint absolutePoint = clientPoint;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to