Title: [141127] trunk
Revision
141127
Author
vcarb...@chromium.org
Date
2013-01-29 09:52:17 -0800 (Tue, 29 Jan 2013)

Log Message

Heap-use-after-free in WebCore::RenderTextTrackCue::layout
https://bugs.webkit.org/show_bug.cgi?id=108197

Reviewed by Eric Carlson.

Source/WebCore:

Test: media/track/track-cue-rendering-tree-is-removed-properly.html

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::textTrackRemoveCue): Ensure the display tree
is removed when the cue is removed from the list of cues.
* html/track/TextTrackCue.cpp:
(WebCore::TextTrackCue::~TextTrackCue): Enfore display tree removal.

LayoutTests:

Added test that triggers the crash. Verified proper removal of the tree.

* media/track/track-cue-rendering-tree-is-removed-properly-expected.txt: Added.
* media/track/track-cue-rendering-tree-is-removed-properly.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (141126 => 141127)


--- trunk/LayoutTests/ChangeLog	2013-01-29 17:50:53 UTC (rev 141126)
+++ trunk/LayoutTests/ChangeLog	2013-01-29 17:52:17 UTC (rev 141127)
@@ -1,3 +1,15 @@
+2013-01-29  Victor Carbune  <vcarb...@chromium.org>
+
+        Heap-use-after-free in WebCore::RenderTextTrackCue::layout
+        https://bugs.webkit.org/show_bug.cgi?id=108197
+
+        Reviewed by Eric Carlson.
+
+        Added test that triggers the crash. Verified proper removal of the tree.
+
+        * media/track/track-cue-rendering-tree-is-removed-properly-expected.txt: Added.
+        * media/track/track-cue-rendering-tree-is-removed-properly.html: Added.
+
 2013-01-29  Ádám Kallai  <ka...@inf.u-szeged.hu>
 
         [Qt] Unreviewed gardening. Skip a failing ref html test.

Added: trunk/LayoutTests/media/track/track-cue-rendering-tree-is-removed-properly-expected.txt (0 => 141127)


--- trunk/LayoutTests/media/track/track-cue-rendering-tree-is-removed-properly-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/track/track-cue-rendering-tree-is-removed-properly-expected.txt	2013-01-29 17:52:17 UTC (rev 141127)
@@ -0,0 +1,16 @@
+Tests that the cue display tree has been removed properly and no crash happens.
+
+** Set the mode of the text track to showing **
+
+** Initialize the video element **
+EVENT(canplaythrough)
+
+** Empty the contents of the video element when it is ready to play **
+
+** Text track should not be rendered anymore **
+No text track cue with display id '-webkit-media-text-track-display' is currently visible
+
+No crash. PASS.
+
+END OF TEST
+

Added: trunk/LayoutTests/media/track/track-cue-rendering-tree-is-removed-properly.html (0 => 141127)


--- trunk/LayoutTests/media/track/track-cue-rendering-tree-is-removed-properly.html	                        (rev 0)
+++ trunk/LayoutTests/media/track/track-cue-rendering-tree-is-removed-properly.html	2013-01-29 17:52:17 UTC (rev 141127)
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+        <script src=""
+        <script src=""
+        <script src=""
+
+        <script>
+        function emptyVideoTextContent()
+        {
+                consoleWrite("");
+                consoleWrite("** Empty the contents of the video element when it is ready to play **");
+                video.textContent = "";
+
+                consoleWrite("");
+                consoleWrite("** Text track should not be rendered anymore **");
+                try {
+                    var textTrackCueBox = textTrackDisplayElement(video, 'display');
+                } catch (e) {
+                    consoleWrite(e);
+                }
+
+                consoleWrite("");
+                consoleWrite("No crash. PASS.");
+                consoleWrite("");
+
+                endTest();
+        }
+
+        function initElements()
+        {
+            consoleWrite("** Set the mode of the text track to showing **");
+            testTrack = document.querySelector('track');
+            testTrack.track.mode = "showing";
+
+            consoleWrite("");
+            consoleWrite("** Initialize the video element **");
+            findMediaElement();
+            video.src = "" '../content/test');
+
+            video.play();
+            waitForEvent('canplaythrough', emptyVideoTextContent);
+        }
+
+        </script>
+    </head>
+    <body _onload_="initElements()">
+        <p>Tests that the cue display tree has been removed properly and no crash happens.</p>
+        <video controls>
+            <track src="" kind="captions">
+        </video>
+    </body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (141126 => 141127)


--- trunk/Source/WebCore/ChangeLog	2013-01-29 17:50:53 UTC (rev 141126)
+++ trunk/Source/WebCore/ChangeLog	2013-01-29 17:52:17 UTC (rev 141127)
@@ -1,3 +1,18 @@
+2013-01-29  Victor Carbune  <vcarb...@chromium.org>
+
+        Heap-use-after-free in WebCore::RenderTextTrackCue::layout
+        https://bugs.webkit.org/show_bug.cgi?id=108197
+
+        Reviewed by Eric Carlson.
+
+        Test: media/track/track-cue-rendering-tree-is-removed-properly.html
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::textTrackRemoveCue): Ensure the display tree
+        is removed when the cue is removed from the list of cues.
+        * html/track/TextTrackCue.cpp:
+        (WebCore::TextTrackCue::~TextTrackCue): Enfore display tree removal.
+
 2013-01-29  Eli Fidler  <efid...@rim.com>
 
         On HarfbuzzNG ports, Arabic TATWEEL is not joined.

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (141126 => 141127)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2013-01-29 17:50:53 UTC (rev 141126)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2013-01-29 17:52:17 UTC (rev 141127)
@@ -1438,6 +1438,7 @@
     if (index != notFound)
         m_currentlyActiveCues.remove(index);
 
+    cue->removeDisplayTree();
     updateActiveTextTrackCues(currentTime());
 }
 

Modified: trunk/Source/WebCore/html/track/TextTrackCue.cpp (141126 => 141127)


--- trunk/Source/WebCore/html/track/TextTrackCue.cpp	2013-01-29 17:50:53 UTC (rev 141126)
+++ trunk/Source/WebCore/html/track/TextTrackCue.cpp	2013-01-29 17:52:17 UTC (rev 141127)
@@ -225,6 +225,7 @@
 
 TextTrackCue::~TextTrackCue()
 {
+    removeDisplayTree();
 }
 
 PassRefPtr<TextTrackCueBox> TextTrackCue::createDisplayTree()
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to