Fix packager crash with corrupted media file

The corrupted media file contains an invalid chunk offset box.

Bug: 18411271

Change-Id: I3d7f51c3647134bd7d0846d0992e10e398784475
This commit is contained in:
KongQun Yang 2014-12-23 12:10:23 -08:00
parent a1ce657a06
commit f66ebe82bb
2 changed files with 9 additions and 3 deletions

View File

@ -39,7 +39,6 @@ void OffsetByteQueue::Pop(int count) {
} }
void OffsetByteQueue::PeekAt(int64_t offset, const uint8_t** buf, int* size) { void OffsetByteQueue::PeekAt(int64_t offset, const uint8_t** buf, int* size) {
DCHECK_GE(offset, head());
if (offset < head() || offset >= tail()) { if (offset < head() || offset >= tail()) {
*buf = NULL; *buf = NULL;
*size = 0; *size = 0;

View File

@ -399,9 +399,16 @@ bool MP4MediaParser::EnqueueSample(bool* err) {
return !*err; return !*err;
} }
queue_.PeekAt(runs_->sample_offset() + moof_head_, &buf, &buf_size); int64_t sample_offset = runs_->sample_offset() + moof_head_;
if (buf_size < runs_->sample_size()) queue_.PeekAt(sample_offset, &buf, &buf_size);
if (buf_size < runs_->sample_size()) {
if (sample_offset < queue_.head()) {
LOG(ERROR) << "Incorrect sample offset " << sample_offset
<< " < " << queue_.head();
*err = true;
}
return false; return false;
}
scoped_refptr<MediaSample> stream_sample(MediaSample::CopyFrom( scoped_refptr<MediaSample> stream_sample(MediaSample::CopyFrom(
buf, runs_->sample_size(), runs_->is_keyframe())); buf, runs_->sample_size(), runs_->is_keyframe()));