| Index: webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
|
| index 167f29ee956ed5000c0da40007aa3a1867e954d4..1b311e64190cd80eb146ddba3628ac67a503d30d 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc
|
| @@ -35,8 +35,11 @@ constexpr RTPExtensionType AbsoluteSendTime::kId;
|
| constexpr uint8_t AbsoluteSendTime::kValueSizeBytes;
|
| constexpr const char* AbsoluteSendTime::kUri;
|
|
|
| -bool AbsoluteSendTime::Parse(const uint8_t* data, uint32_t* time_24bits) {
|
| - *time_24bits = ByteReader<uint32_t, 3>::ReadBigEndian(data);
|
| +bool AbsoluteSendTime::Parse(rtc::ArrayView<const uint8_t> data,
|
| + uint32_t* time_24bits) {
|
| + if (data.size() != 3)
|
| + return false;
|
| + *time_24bits = ByteReader<uint32_t, 3>::ReadBigEndian(data.data());
|
| return true;
|
| }
|
|
|
| @@ -61,9 +64,11 @@ constexpr RTPExtensionType AudioLevel::kId;
|
| constexpr uint8_t AudioLevel::kValueSizeBytes;
|
| constexpr const char* AudioLevel::kUri;
|
|
|
| -bool AudioLevel::Parse(const uint8_t* data,
|
| +bool AudioLevel::Parse(rtc::ArrayView<const uint8_t> data,
|
| bool* voice_activity,
|
| uint8_t* audio_level) {
|
| + if (data.size() != 1)
|
| + return false;
|
| *voice_activity = (data[0] & 0x80) != 0;
|
| *audio_level = data[0] & 0x7F;
|
| return true;
|
| @@ -97,8 +102,11 @@ constexpr RTPExtensionType TransmissionOffset::kId;
|
| constexpr uint8_t TransmissionOffset::kValueSizeBytes;
|
| constexpr const char* TransmissionOffset::kUri;
|
|
|
| -bool TransmissionOffset::Parse(const uint8_t* data, int32_t* rtp_time) {
|
| - *rtp_time = ByteReader<int32_t, 3>::ReadBigEndian(data);
|
| +bool TransmissionOffset::Parse(rtc::ArrayView<const uint8_t> data,
|
| + int32_t* rtp_time) {
|
| + if (data.size() != 3)
|
| + return false;
|
| + *rtp_time = ByteReader<int32_t, 3>::ReadBigEndian(data.data());
|
| return true;
|
| }
|
|
|
| @@ -117,8 +125,11 @@ constexpr RTPExtensionType TransportSequenceNumber::kId;
|
| constexpr uint8_t TransportSequenceNumber::kValueSizeBytes;
|
| constexpr const char* TransportSequenceNumber::kUri;
|
|
|
| -bool TransportSequenceNumber::Parse(const uint8_t* data, uint16_t* value) {
|
| - *value = ByteReader<uint16_t>::ReadBigEndian(data);
|
| +bool TransportSequenceNumber::Parse(rtc::ArrayView<const uint8_t> data,
|
| + uint16_t* value) {
|
| + if (data.size() != 2)
|
| + return false;
|
| + *value = ByteReader<uint16_t>::ReadBigEndian(data.data());
|
| return true;
|
| }
|
|
|
| @@ -142,7 +153,10 @@ constexpr RTPExtensionType VideoOrientation::kId;
|
| constexpr uint8_t VideoOrientation::kValueSizeBytes;
|
| constexpr const char* VideoOrientation::kUri;
|
|
|
| -bool VideoOrientation::Parse(const uint8_t* data, VideoRotation* rotation) {
|
| +bool VideoOrientation::Parse(rtc::ArrayView<const uint8_t> data,
|
| + VideoRotation* rotation) {
|
| + if (data.size() != 1)
|
| + return false;
|
| *rotation = ConvertCVOByteToVideoRotation(data[0]);
|
| return true;
|
| }
|
| @@ -152,7 +166,10 @@ bool VideoOrientation::Write(uint8_t* data, VideoRotation rotation) {
|
| return true;
|
| }
|
|
|
| -bool VideoOrientation::Parse(const uint8_t* data, uint8_t* value) {
|
| +bool VideoOrientation::Parse(rtc::ArrayView<const uint8_t> data,
|
| + uint8_t* value) {
|
| + if (data.size() != 1)
|
| + return false;
|
| *value = data[0];
|
| return true;
|
| }
|
| @@ -171,10 +188,12 @@ constexpr RTPExtensionType PlayoutDelayLimits::kId;
|
| constexpr uint8_t PlayoutDelayLimits::kValueSizeBytes;
|
| constexpr const char* PlayoutDelayLimits::kUri;
|
|
|
| -bool PlayoutDelayLimits::Parse(const uint8_t* data,
|
| +bool PlayoutDelayLimits::Parse(rtc::ArrayView<const uint8_t> data,
|
| PlayoutDelay* playout_delay) {
|
| RTC_DCHECK(playout_delay);
|
| - uint32_t raw = ByteReader<uint32_t, 3>::ReadBigEndian(data);
|
| + if (data.size() != 3)
|
| + return false;
|
| + uint32_t raw = ByteReader<uint32_t, 3>::ReadBigEndian(data.data());
|
| uint16_t min_raw = (raw >> 12);
|
| uint16_t max_raw = (raw & 0xfff);
|
| if (min_raw > max_raw)
|
|
|