Title: [215011] releases/WebKitGTK/webkit-2.14
Revision
215011
Author
carlo...@webkit.org
Date
2017-04-06 03:09:31 -0700 (Thu, 06 Apr 2017)

Log Message

Merge r212029 - Make sure Event keeps its current target element alive
https://bugs.webkit.org/show_bug.cgi?id=167885
<rdar://problem/30376972>

Patch by Chris Dumez <cdu...@apple.com> on 2017-02-09
Reviewed by Brent Fulgham.

Source/WebCore:

Make sure Event keeps its current target element alive to avoid
crashes if it is accessed by JS after it has been garbage collected.

Test: fast/events/currentTarget-gc-crash.html

* dom/Event.cpp:
(WebCore::Event::setCurrentTarget):
* dom/Event.h:
(WebCore::Event::currentTarget):

LayoutTests:

Add layout test reproducing the crash.

* fast/events/currentTarget-gc-crash-expected.txt: Added.
* fast/events/currentTarget-gc-crash.html: Added.

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.14/LayoutTests/ChangeLog (215010 => 215011)


--- releases/WebKitGTK/webkit-2.14/LayoutTests/ChangeLog	2017-04-06 10:04:21 UTC (rev 215010)
+++ releases/WebKitGTK/webkit-2.14/LayoutTests/ChangeLog	2017-04-06 10:09:31 UTC (rev 215011)
@@ -1,3 +1,16 @@
+2017-02-09  Chris Dumez  <cdu...@apple.com>
+
+        Make sure Event keeps its current target element alive
+        https://bugs.webkit.org/show_bug.cgi?id=167885
+        <rdar://problem/30376972>
+
+        Reviewed by Brent Fulgham.
+
+        Add layout test reproducing the crash.
+
+        * fast/events/currentTarget-gc-crash-expected.txt: Added.
+        * fast/events/currentTarget-gc-crash.html: Added.
+
 2017-02-09  Ryosuke Niwa  <rn...@webkit.org>
 
         Crash in render tree after dynamically mutating the slot value

Added: releases/WebKitGTK/webkit-2.14/LayoutTests/fast/events/currentTarget-gc-crash-expected.txt (0 => 215011)


--- releases/WebKitGTK/webkit-2.14/LayoutTests/fast/events/currentTarget-gc-crash-expected.txt	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.14/LayoutTests/fast/events/currentTarget-gc-crash-expected.txt	2017-04-06 10:09:31 UTC (rev 215011)
@@ -0,0 +1,9 @@
+This test passes if it does not crash
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: releases/WebKitGTK/webkit-2.14/LayoutTests/fast/events/currentTarget-gc-crash.html (0 => 215011)


--- releases/WebKitGTK/webkit-2.14/LayoutTests/fast/events/currentTarget-gc-crash.html	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.14/LayoutTests/fast/events/currentTarget-gc-crash.html	2017-04-06 10:09:31 UTC (rev 215011)
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script>
+function f1() {
+    var iframe = document.getElementById("iframe");
+    iframe.srcdoc = "x";
+    window.frames.event = window.event;
+    gc();
+}
+function f2() {
+    var h = new XMLHttpRequest();
+    h._onreadystatechange_ = f1;
+    h.open("foo", "1");
+    var e = window.event;
+    e.initEvent("1", true, true);
+    try {
+        e.currentTarget.click();
+    } catch(e) { }
+    setTimeout(finishJSTest, 100);
+}
+</script>
+</head>
+<body _onload_="f1()">
+<script>
+description("This test passes if it does not crash");
+jsTestIsAsync = true;
+</script>
+<iframe id="iframe" _onload_="f2()"></iframe>
+<script src=""
+</body>
+</html>

Modified: releases/WebKitGTK/webkit-2.14/Source/WebCore/ChangeLog (215010 => 215011)


--- releases/WebKitGTK/webkit-2.14/Source/WebCore/ChangeLog	2017-04-06 10:04:21 UTC (rev 215010)
+++ releases/WebKitGTK/webkit-2.14/Source/WebCore/ChangeLog	2017-04-06 10:09:31 UTC (rev 215011)
@@ -1,3 +1,21 @@
+2017-02-09  Chris Dumez  <cdu...@apple.com>
+
+        Make sure Event keeps its current target element alive
+        https://bugs.webkit.org/show_bug.cgi?id=167885
+        <rdar://problem/30376972>
+
+        Reviewed by Brent Fulgham.
+
+        Make sure Event keeps its current target element alive to avoid
+        crashes if it is accessed by JS after it has been garbage collected.
+
+        Test: fast/events/currentTarget-gc-crash.html
+
+        * dom/Event.cpp:
+        (WebCore::Event::setCurrentTarget):
+        * dom/Event.h:
+        (WebCore::Event::currentTarget):
+
 2017-02-09  Ryosuke Niwa  <rn...@webkit.org>
 
         Crash in render tree after dynamically mutating the slot value

Modified: releases/WebKitGTK/webkit-2.14/Source/WebCore/dom/Event.cpp (215010 => 215011)


--- releases/WebKitGTK/webkit-2.14/Source/WebCore/dom/Event.cpp	2017-04-06 10:04:21 UTC (rev 215010)
+++ releases/WebKitGTK/webkit-2.14/Source/WebCore/dom/Event.cpp	2017-04-06 10:09:31 UTC (rev 215011)
@@ -192,6 +192,11 @@
         receivedTarget();
 }
 
+void Event::setCurrentTarget(EventTarget* currentTarget)
+{
+    m_currentTarget = currentTarget;
+}
+
 Vector<EventTarget*> Event::composedPath() const
 {
     if (!m_eventPath)

Modified: releases/WebKitGTK/webkit-2.14/Source/WebCore/dom/Event.h (215010 => 215011)


--- releases/WebKitGTK/webkit-2.14/Source/WebCore/dom/Event.h	2017-04-06 10:04:21 UTC (rev 215010)
+++ releases/WebKitGTK/webkit-2.14/Source/WebCore/dom/Event.h	2017-04-06 10:09:31 UTC (rev 215011)
@@ -106,8 +106,8 @@
     EventTarget* target() const { return m_target.get(); }
     void setTarget(RefPtr<EventTarget>&&);
 
-    EventTarget* currentTarget() const { return m_currentTarget; }
-    void setCurrentTarget(EventTarget* currentTarget) { m_currentTarget = currentTarget; }
+    EventTarget* currentTarget() const { return m_currentTarget.get(); }
+    void setCurrentTarget(EventTarget*);
 
     unsigned short eventPhase() const { return m_eventPhase; }
     void setEventPhase(unsigned short eventPhase) { m_eventPhase = eventPhase; }
@@ -221,7 +221,7 @@
     bool m_isExecutingPassiveEventListener { false };
 
     unsigned short m_eventPhase { 0 };
-    EventTarget* m_currentTarget { nullptr };
+    RefPtr<EventTarget> m_currentTarget;
     const EventPath* m_eventPath { nullptr };
     RefPtr<EventTarget> m_target;
     DOMTimeStamp m_createTime;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to