summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-06 12:06:56 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-06 12:06:56 +0000
commita310084bc0e92a7eafc992ea06cc0603f57181f8 (patch)
tree280e084ad116fa020dd37e9c5ce9206d88ab569e /media
parent9483152e5e83ee5b5e8f867e59ad22ef4cb9bad9 (diff)
downloadchromium_src-a310084bc0e92a7eafc992ea06cc0603f57181f8.zip
chromium_src-a310084bc0e92a7eafc992ea06cc0603f57181f8.tar.gz
chromium_src-a310084bc0e92a7eafc992ea06cc0603f57181f8.tar.bz2
Fix null pointer dereference in FFmpegDemuxer::OnReadFrameDone
BUG=341193 TEST=FFmpegDemuxerTest.Read_EndOfStream_NoDuration_UnsupportedStream Review URL: https://codereview.chromium.org/131333008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@249378 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/filters/ffmpeg_demuxer.cc3
-rw-r--r--media/filters/ffmpeg_demuxer_unittest.cc10
2 files changed, 13 insertions, 0 deletions
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
index e032471..0dec8b8 100644
--- a/media/filters/ffmpeg_demuxer.cc
+++ b/media/filters/ffmpeg_demuxer.cc
@@ -809,6 +809,9 @@ void FFmpegDemuxer::OnReadFrameDone(ScopedAVPacket packet, int result) {
for (StreamVector::iterator iter = streams_.begin();
iter != streams_.end();
++iter) {
+ if (!*iter)
+ continue;
+
base::TimeDelta duration = (*iter)->GetElapsedTime();
if (duration != kNoTimestamp() && duration > max_duration)
max_duration = duration;
diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc
index 0a3fe64..9916f6f 100644
--- a/media/filters/ffmpeg_demuxer_unittest.cc
+++ b/media/filters/ffmpeg_demuxer_unittest.cc
@@ -462,6 +462,16 @@ TEST_F(FFmpegDemuxerTest, Read_EndOfStream_NoDuration_AudioOnly) {
ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::AUDIO));
}
+TEST_F(FFmpegDemuxerTest, Read_EndOfStream_NoDuration_UnsupportedStream) {
+ // Verify that end of stream buffers are created and we don't crash
+ // if there are streams in the file that we don't support.
+ CreateDemuxer("vorbis_audio_wmv_video.mkv");
+ InitializeDemuxer();
+ set_duration_known(false);
+ EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(1014)));
+ ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::AUDIO));
+}
+
TEST_F(FFmpegDemuxerTest, Seek) {
// We're testing that the demuxer frees all queued packets when it receives
// a Seek().