Title: [133609] trunk
Revision
133609
Author
[email protected]
Date
2012-11-06 07:42:48 -0800 (Tue, 06 Nov 2012)

Log Message

Regression(r132681): Heap-use-after-free in WebCore::RenderTextTrackCue::layout
https://bugs.webkit.org/show_bug.cgi?id=100981

Patch by Aaron Colwell <[email protected]> on 2012-11-06
Reviewed by Eric Carlson.

Source/WebCore:

Fixing a TextTrackCue use after free bug. textTrackRemoveCues() needs to be called when
an HTMLTrackElement is removed from an HTMLMediaElement so that references to
TextTrackCues are removed from m_cueTree.

Test: media/track/track-remove-by-setting-innerHTML.html

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::willRemoveTrack):

LayoutTests:

Added a test that removes track elements by setting innerHTML on the track's parent.

* media/track/track-remove-by-setting-innerHTML-expected.txt: Added.
* media/track/track-remove-by-setting-innerHTML.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (133608 => 133609)


--- trunk/LayoutTests/ChangeLog	2012-11-06 15:34:13 UTC (rev 133608)
+++ trunk/LayoutTests/ChangeLog	2012-11-06 15:42:48 UTC (rev 133609)
@@ -1,3 +1,15 @@
+2012-11-06  Aaron Colwell  <[email protected]>
+
+        Regression(r132681): Heap-use-after-free in WebCore::RenderTextTrackCue::layout
+        https://bugs.webkit.org/show_bug.cgi?id=100981
+
+        Reviewed by Eric Carlson.
+
+        Added a test that removes track elements by setting innerHTML on the track's parent.
+
+        * media/track/track-remove-by-setting-innerHTML-expected.txt: Added.
+        * media/track/track-remove-by-setting-innerHTML.html: Added.
+
 2012-11-06  Max Feil  <[email protected]>
 
         [BlackBerry] Automatically go fullscreen on video play

Added: trunk/LayoutTests/media/track/track-remove-by-setting-innerHTML-expected.txt (0 => 133609)


--- trunk/LayoutTests/media/track/track-remove-by-setting-innerHTML-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/track/track-remove-by-setting-innerHTML-expected.txt	2012-11-06 15:42:48 UTC (rev 133609)
@@ -0,0 +1,9 @@
+This test makes sure that removing a track by setting video.innerHTML doesn't crash (https://bugs.webkit.org/show_bug.cgi?id=100981).
+If this test does not crash, it passes.
+
+EVENT(canplaythrough)
+EVENT(seeked)
+RUN(video.currentTime = 7.9)
+EVENT(seeked)
+END OF TEST
+

Added: trunk/LayoutTests/media/track/track-remove-by-setting-innerHTML.html (0 => 133609)


--- trunk/LayoutTests/media/track/track-remove-by-setting-innerHTML.html	                        (rev 0)
+++ trunk/LayoutTests/media/track/track-remove-by-setting-innerHTML.html	2012-11-06 15:42:48 UTC (rev 133609)
@@ -0,0 +1,46 @@
+<!doctype html>
+<html>
+    <head>
+        <script src=""
+        <script src=""
+        <script type="text/_javascript_">
+            var firstSeek = true;
+
+            function seeked()
+            {
+                if (!firstSeek) {
+                    endTest();
+                    return;
+                }
+
+                // Remove the text tra
+                video.innerHTML = "This is a test";
+
+                // Seek again to force a repaint.
+                run("video.currentTime = 7.9");
+                firstSeek = false;
+            }
+
+            function loaded()
+            {
+                findMediaElement();
+                waitForEvent('error');
+                waitForEvent('seeked', seeked);
+                waitForEvent('canplaythrough', function()
+                {
+                    video.currentTime = 0.5;
+                });
+                video.src = "" '../content/counting');
+            }
+        </script>
+    </head>
+    <body _onload_=loaded()>
+        <video>
+            <track default="" src=""
+        </video>
+        <div>
+          This test makes sure that removing a track by setting video.innerHTML doesn't crash (https://bugs.webkit.org/show_bug.cgi?id=100981).
+          <p>If this test does not crash, it passes.</p>
+        </div>
+    </body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (133608 => 133609)


--- trunk/Source/WebCore/ChangeLog	2012-11-06 15:34:13 UTC (rev 133608)
+++ trunk/Source/WebCore/ChangeLog	2012-11-06 15:42:48 UTC (rev 133609)
@@ -1,3 +1,19 @@
+2012-11-06  Aaron Colwell  <[email protected]>
+
+        Regression(r132681): Heap-use-after-free in WebCore::RenderTextTrackCue::layout
+        https://bugs.webkit.org/show_bug.cgi?id=100981
+
+        Reviewed by Eric Carlson.
+
+        Fixing a TextTrackCue use after free bug. textTrackRemoveCues() needs to be called when
+        an HTMLTrackElement is removed from an HTMLMediaElement so that references to
+        TextTrackCues are removed from m_cueTree.
+
+        Test: media/track/track-remove-by-setting-innerHTML.html
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::willRemoveTrack):
+
 2012-10-23  Stephen White  <[email protected]>
 
         [skia] Implement reference (url) filters on composited layers.

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (133608 => 133609)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2012-11-06 15:34:13 UTC (rev 133608)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2012-11-06 15:42:48 UTC (rev 133609)
@@ -2831,6 +2831,14 @@
     // then the user agent must remove the track element's corresponding text track from the 
     // media element's list of text tracks.
     m_textTracks->remove(textTrack.get());
+    if (textTrack->cues()) {
+        TextTrackCueList* cues = textTrack->cues();
+        beginIgnoringTrackDisplayUpdateRequests();
+        for (size_t i = 0; i < cues->length(); ++i)
+            textTrackRemoveCue(cues->item(i)->track(), cues->item(i));
+        endIgnoringTrackDisplayUpdateRequests();
+    }
+
     size_t index = m_textTracksWhenResourceSelectionBegan.find(textTrack.get());
     if (index != notFound)
         m_textTracksWhenResourceSelectionBegan.remove(index);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to