From c87a1361b7f037393beaf6015efe4baa672a2a35 Mon Sep 17 00:00:00 2001 From: "cevans@chromium.org" Date: Thu, 3 Sep 2009 18:27:40 +0000 Subject: Do not permit a seek to a negative position. This was already an error condition (in the FFmpeg glue code) but the position would be left set to negative. If the API consumer ignored the error code for the seek and then attempted a read, that might be a bad state. I am fixing this to avoid any risk of this upsetting the stream read code. FFmpeg would seem to commit this sort of API abuse. BUG=NONE TEST=FFmpegDemuxerTest.ProtocolGetSetPosition Review URL: http://codereview.chromium.org/201002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25334 0039d316-1c4b-4281-b951-d872f2087c98 --- media/filters/ffmpeg_demuxer.cc | 3 ++- media/filters/ffmpeg_demuxer_unittest.cc | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc index af0d71e..4c26a8a 100644 --- a/media/filters/ffmpeg_demuxer.cc +++ b/media/filters/ffmpeg_demuxer.cc @@ -328,7 +328,8 @@ bool FFmpegDemuxer::SetPosition(int64 position) { DCHECK(data_source_); int64 file_size; - if (!data_source_->GetSize(&file_size) || position >= file_size) + if (!data_source_->GetSize(&file_size) || position >= file_size || + position < 0) return false; read_position_ = position; diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc index 078f54b..2bea53a 100644 --- a/media/filters/ffmpeg_demuxer_unittest.cc +++ b/media/filters/ffmpeg_demuxer_unittest.cc @@ -769,6 +769,8 @@ TEST_F(FFmpegDemuxerTest, ProtocolGetSetPosition) { .WillOnce(DoAll(SetArgumentPointee<0>(1024), Return(true))); EXPECT_CALL(*data_source_, GetSize(_)) .WillOnce(DoAll(SetArgumentPointee<0>(1024), Return(true))); + EXPECT_CALL(*data_source_, GetSize(_)) + .WillOnce(DoAll(SetArgumentPointee<0>(1024), Return(true))); int64 position; EXPECT_TRUE(demuxer_->GetPosition(&position)); @@ -776,6 +778,7 @@ TEST_F(FFmpegDemuxerTest, ProtocolGetSetPosition) { EXPECT_TRUE(demuxer_->SetPosition(512)); EXPECT_FALSE(demuxer_->SetPosition(2048)); + EXPECT_FALSE(demuxer_->SetPosition(-1)); EXPECT_TRUE(demuxer_->GetPosition(&position)); EXPECT_EQ(512, position); } -- cgit v1.1