diff options
Diffstat (limited to 'chromium/media/formats/mp4/avc.cc')
-rw-r--r-- | chromium/media/formats/mp4/avc.cc | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/chromium/media/formats/mp4/avc.cc b/chromium/media/formats/mp4/avc.cc index 509335b07e9..6512ad65394 100644 --- a/chromium/media/formats/mp4/avc.cc +++ b/chromium/media/formats/mp4/avc.cc @@ -21,9 +21,9 @@ static const uint8_t kAnnexBStartCode[] = {0, 0, 0, 1}; static const int kAnnexBStartCodeSize = 4; static bool ConvertAVCToAnnexBInPlaceForLengthSize4(std::vector<uint8_t>* buf) { - const int kLengthSize = 4; + const size_t kLengthSize = 4; size_t pos = 0; - while (pos + kLengthSize < buf->size()) { + while (buf->size() > kLengthSize && buf->size() - kLengthSize > pos) { uint32_t nal_length = (*buf)[pos]; nal_length = (nal_length << 8) + (*buf)[pos+1]; nal_length = (nal_length << 8) + (*buf)[pos+2]; @@ -61,7 +61,7 @@ int AVC::FindSubsampleIndex(const std::vector<uint8_t>& buffer, } // static -bool AVC::ConvertFrameToAnnexB(int length_size, +bool AVC::ConvertFrameToAnnexB(size_t length_size, std::vector<uint8_t>* buffer, std::vector<SubsampleEntry>* subsamples) { RCHECK(length_size == 1 || length_size == 2 || length_size == 4); @@ -77,8 +77,8 @@ bool AVC::ConvertFrameToAnnexB(int length_size, buffer->reserve(temp.size() + 32); size_t pos = 0; - while (pos + length_size < temp.size()) { - int nal_length = temp[pos]; + while (temp.size() > length_size && temp.size() - length_size > pos) { + size_t nal_length = temp[pos]; if (length_size == 2) nal_length = (nal_length << 8) + temp[pos+1]; pos += length_size; @@ -87,7 +87,7 @@ bool AVC::ConvertFrameToAnnexB(int length_size, return false; } - RCHECK(pos + nal_length <= temp.size()); + RCHECK(temp.size() >= nal_length && temp.size() - nal_length >= pos); buffer->insert(buffer->end(), kAnnexBStartCode, kAnnexBStartCode + kAnnexBStartCodeSize); if (subsamples && !subsamples->empty()) { |