Loading media/libstagefright/FileSource.cpp +25 −3 Original line number Diff line number Diff line Loading @@ -61,8 +61,30 @@ FileSource::FileSource(int fd, int64_t offset, int64_t length) ALOGV("fd=%d (%s), offset=%lld, length=%lld", fd, nameForFd(fd).c_str(), (long long) offset, (long long) length); CHECK(offset >= 0); CHECK(length >= 0); if (mOffset < 0) { mOffset = 0; } if (mLength < 0) { mLength = 0; } if (mLength > INT64_MAX - mOffset) { mLength = INT64_MAX - mOffset; } struct stat s; if (fstat(fd, &s) == 0) { if (mOffset > s.st_size) { mOffset = s.st_size; mLength = 0; } if (mOffset + mLength > s.st_size) { mLength = s.st_size - mOffset; } } if (mOffset != offset || mLength != length) { ALOGW("offset/length adjusted from %lld/%lld to %lld/%lld", (long long) offset, (long long) length, (long long) mOffset, (long long) mLength); } } FileSource::~FileSource() { Loading media/libstagefright/MP3Extractor.cpp +8 −1 Original line number Diff line number Diff line Loading @@ -252,6 +252,7 @@ MP3Extractor::MP3Extractor( mDataSource(source), mFirstFramePos(-1), mFixedHeader(0) { off64_t pos = 0; off64_t post_id3_pos; uint32_t header; Loading Loading @@ -350,7 +351,13 @@ MP3Extractor::MP3Extractor( if (mSeeker == NULL || !mSeeker->getDuration(&durationUs)) { off64_t fileSize; if (mDataSource->getSize(&fileSize) == OK) { durationUs = 8000LL * (fileSize - mFirstFramePos) / bitrate; off64_t dataLength = fileSize - mFirstFramePos; if (dataLength > INT64_MAX / 8000LL) { // duration would overflow durationUs = INT64_MAX; } else { durationUs = 8000LL * dataLength / bitrate; } } else { durationUs = -1; } Loading Loading
media/libstagefright/FileSource.cpp +25 −3 Original line number Diff line number Diff line Loading @@ -61,8 +61,30 @@ FileSource::FileSource(int fd, int64_t offset, int64_t length) ALOGV("fd=%d (%s), offset=%lld, length=%lld", fd, nameForFd(fd).c_str(), (long long) offset, (long long) length); CHECK(offset >= 0); CHECK(length >= 0); if (mOffset < 0) { mOffset = 0; } if (mLength < 0) { mLength = 0; } if (mLength > INT64_MAX - mOffset) { mLength = INT64_MAX - mOffset; } struct stat s; if (fstat(fd, &s) == 0) { if (mOffset > s.st_size) { mOffset = s.st_size; mLength = 0; } if (mOffset + mLength > s.st_size) { mLength = s.st_size - mOffset; } } if (mOffset != offset || mLength != length) { ALOGW("offset/length adjusted from %lld/%lld to %lld/%lld", (long long) offset, (long long) length, (long long) mOffset, (long long) mLength); } } FileSource::~FileSource() { Loading
media/libstagefright/MP3Extractor.cpp +8 −1 Original line number Diff line number Diff line Loading @@ -252,6 +252,7 @@ MP3Extractor::MP3Extractor( mDataSource(source), mFirstFramePos(-1), mFixedHeader(0) { off64_t pos = 0; off64_t post_id3_pos; uint32_t header; Loading Loading @@ -350,7 +351,13 @@ MP3Extractor::MP3Extractor( if (mSeeker == NULL || !mSeeker->getDuration(&durationUs)) { off64_t fileSize; if (mDataSource->getSize(&fileSize) == OK) { durationUs = 8000LL * (fileSize - mFirstFramePos) / bitrate; off64_t dataLength = fileSize - mFirstFramePos; if (dataLength > INT64_MAX / 8000LL) { // duration would overflow durationUs = INT64_MAX; } else { durationUs = 8000LL * dataLength / bitrate; } } else { durationUs = -1; } Loading