summaryrefslogtreecommitdiffstats
path: root/media/base/audio_splicer.cc
diff options
context:
space:
mode:
authordalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-08 09:43:12 +0000
committerdalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-08 09:44:37 +0000
commiteb7928a731f7f9a7282fcb503295d37e5a8ce1eb (patch)
treec77842c0f38fb2932c443afdfa2bba803cba9010 /media/base/audio_splicer.cc
parent0d830e6b4659a688c94dd33e9fb0a8d4bc5c9b9b (diff)
downloadchromium_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.cc6
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