| Index: webrtc/modules/rtp_rtcp/source/rtcp_utility.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_utility.cc b/webrtc/modules/rtp_rtcp/source/rtcp_utility.cc
|
| index 63693fa9c2289cfaf7bf229ec82ff8352225e87d..9d44c4f8757575a5c9eed49a082bf4ef180c3af2 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtcp_utility.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtcp_utility.cc
|
| @@ -130,9 +130,6 @@ RTCPUtility::RTCPParserV2::Iterate()
|
| case ParseState::State_PSFB_SLIItem:
|
| IterateSLIItem();
|
| break;
|
| - case ParseState::State_PSFB_RPSIItem:
|
| - IterateRPSIItem();
|
| - break;
|
| case ParseState::State_PSFB_FIRItem:
|
| IterateFIRItem();
|
| break;
|
| @@ -365,16 +362,6 @@ RTCPUtility::RTCPParserV2::IterateSLIItem()
|
| }
|
|
|
| void
|
| -RTCPUtility::RTCPParserV2::IterateRPSIItem()
|
| -{
|
| - const bool success = ParseRPSIItem();
|
| - if (!success)
|
| - {
|
| - Iterate();
|
| - }
|
| -}
|
| -
|
| -void
|
| RTCPUtility::RTCPParserV2::IterateFIRItem()
|
| {
|
| const bool success = ParseFIRItem();
|
| @@ -1273,11 +1260,12 @@ bool RTCPUtility::RTCPParserV2::ParseFBCommon(const RtcpCommonHeader& header) {
|
|
|
| return true;
|
| case 3:
|
| - _packetType = RTCPPacketTypes::kPsfbRpsi;
|
| _packet.RPSI.SenderSSRC = senderSSRC;
|
| _packet.RPSI.MediaSSRC = mediaSSRC;
|
| -
|
| - _state = ParseState::State_PSFB_RPSIItem;
|
| + if (!ParseRPSI()) {
|
| + _packetType = RTCPPacketTypes::kInvalid;
|
| + return false;
|
| + }
|
| return true;
|
| case 4:
|
| // FIR
|
| @@ -1307,7 +1295,7 @@ bool RTCPUtility::RTCPParserV2::ParseFBCommon(const RtcpCommonHeader& header) {
|
| }
|
| }
|
|
|
| -bool RTCPUtility::RTCPParserV2::ParseRPSIItem() {
|
| +bool RTCPUtility::RTCPParserV2::ParseRPSI() {
|
|
|
| // RFC 4585 6.3.3. Reference Picture Selection Indication (RPSI).
|
| //
|
| @@ -1322,28 +1310,27 @@ bool RTCPUtility::RTCPParserV2::ParseRPSIItem() {
|
| const ptrdiff_t length = _ptrRTCPBlockEnd - _ptrRTCPData;
|
|
|
| if (length < 4) {
|
| - _state = ParseState::State_TopLevel;
|
| -
|
| EndCurrentBlock();
|
| return false;
|
| }
|
| if (length > 2 + RTCP_RPSI_DATA_SIZE) {
|
| - _state = ParseState::State_TopLevel;
|
| -
|
| EndCurrentBlock();
|
| return false;
|
| }
|
|
|
| - _packetType = RTCPPacketTypes::kPsfbRpsi;
|
| -
|
| uint8_t padding_bits = *_ptrRTCPData++;
|
| _packet.RPSI.PayloadType = *_ptrRTCPData++;
|
|
|
| memcpy(_packet.RPSI.NativeBitString, _ptrRTCPData, length - 2);
|
| _ptrRTCPData += length - 2;
|
|
|
| + if (padding_bits > (length - 2) * 8) {
|
| + EndCurrentBlock();
|
| + return false;
|
| + }
|
| _packet.RPSI.NumberOfValidBits =
|
| static_cast<uint16_t>(length - 2) * 8 - padding_bits;
|
| + _packetType = RTCPPacketTypes::kPsfbRpsi;
|
| return true;
|
| }
|
|
|
|
|