diff options
author | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-08 09:43:12 +0000 |
---|---|---|
committer | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-08 09:44:37 +0000 |
commit | eb7928a731f7f9a7282fcb503295d37e5a8ce1eb (patch) | |
tree | c77842c0f38fb2932c443afdfa2bba803cba9010 /media/base/audio_splicer.cc | |
parent | 0d830e6b4659a688c94dd33e9fb0a8d4bc5c9b9b (diff) | |
download | chromium_src-eb7928a731f7f9a7282fcb503295d37e5a8ce1eb.zip chromium_src-eb7928a731f7f9a7282fcb503295d37e5a8ce1eb.tar.gz chromium_src-eb7928a731f7f9a7282fcb503295d37e5a8ce1eb.tar.bz2 |
Don't crash when splices are in the past due to bad media.
Bad media may result in splice frames way in the past. We need
to avoid crashing in this case. See the bug for more details.
BUG=400442
TEST=new media test.
Review URL: https://codereview.chromium.org/440803002
Cr-Commit-Position: refs/heads/master@{#288284}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@288284 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/base/audio_splicer.cc')
-rw-r--r-- | media/base/audio_splicer.cc | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/media/base/audio_splicer.cc b/media/base/audio_splicer.cc index 7fafc8b..0c8ac34 100644 --- a/media/base/audio_splicer.cc +++ b/media/base/audio_splicer.cc @@ -302,8 +302,10 @@ bool AudioSplicer::AddInput(const scoped_refptr<AudioBuffer>& input) { // If a splice frame was incorrectly marked due to poor demuxed timestamps, we // may not actually have a splice. Here we check if any frames exist before // the splice. In this case, just transfer all data to the output sanitizer. - if (pre_splice_sanitizer_->GetFrameCount() <= - output_ts_helper.GetFramesToTarget(splice_timestamp_)) { + const int frames_before_splice = + output_ts_helper.GetFramesToTarget(splice_timestamp_); + if (frames_before_splice < 0 || + pre_splice_sanitizer_->GetFrameCount() <= frames_before_splice) { CHECK(pre_splice_sanitizer_->DrainInto(output_sanitizer_.get())); // If the file contains incorrectly muxed timestamps, there may be huge gaps |