diff options
author | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-06 12:06:56 +0000 |
---|---|---|
committer | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-06 12:06:56 +0000 |
commit | a310084bc0e92a7eafc992ea06cc0603f57181f8 (patch) | |
tree | 280e084ad116fa020dd37e9c5ce9206d88ab569e /media | |
parent | 9483152e5e83ee5b5e8f867e59ad22ef4cb9bad9 (diff) | |
download | chromium_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.cc | 3 | ||||
-rw-r--r-- | media/filters/ffmpeg_demuxer_unittest.cc | 10 |
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(). |