| 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;
 | 
|  }
 | 
|  
 | 
| 
 |