Bug 1435025: don't parse padding on SRTP packets r=bwc,jesup

MozReview-Commit-ID: HNW2BTRoJp2

--HG--
extra : rebase_source : b61dfd0fee200045beaa60b9a4ed12c979ae6dc5
This commit is contained in:
Nils Ohlmeier [:drno] 2018-02-07 22:50:55 -08:00
parent 9235487cb3
commit 1e1b47f60a
5 changed files with 14 additions and 8 deletions

View File

@ -1106,7 +1106,7 @@ MediaPipeline::RtpPacketReceived(TransportLayer* aLayer,
}
webrtc::RTPHeader header;
if (!mRtpParser->Parse(aData, aLen, &header)) {
if (!mRtpParser->Parse(aData, aLen, &header, true)) {
return;
}

View File

@ -31,7 +31,8 @@ class RtpHeaderParser {
// at once.
virtual bool Parse(const uint8_t* packet,
size_t length,
RTPHeader* header) const = 0;
RTPHeader* header,
bool secured = false) const = 0;
// Registers an RTP header extension and binds it to |id|.
virtual bool RegisterRtpHeaderExtension(RTPExtensionType type,

View File

@ -22,7 +22,8 @@ class RtpHeaderParserImpl : public RtpHeaderParser {
bool Parse(const uint8_t* packet,
size_t length,
RTPHeader* header) const override;
RTPHeader* header,
bool secured) const override;
bool RegisterRtpHeaderExtension(RTPExtensionType type, uint8_t id) override;
@ -46,7 +47,8 @@ bool RtpHeaderParser::IsRtcp(const uint8_t* packet, size_t length) {
bool RtpHeaderParserImpl::Parse(const uint8_t* packet,
size_t length,
RTPHeader* header) const {
RTPHeader* header,
bool secured) const {
RtpUtility::RtpHeaderParser rtp_parser(packet, length);
memset(header, 0, sizeof(*header));
@ -56,7 +58,7 @@ bool RtpHeaderParserImpl::Parse(const uint8_t* packet,
map = rtp_header_extension_map_;
}
const bool valid_rtpheader = rtp_parser.Parse(header, &map);
const bool valid_rtpheader = rtp_parser.Parse(header, &map, secured);
if (!valid_rtpheader) {
return false;
}

View File

@ -180,7 +180,8 @@ bool RtpHeaderParser::ParseRtcp(RTPHeader* header) const {
}
bool RtpHeaderParser::Parse(RTPHeader* header,
RtpHeaderExtensionMap* ptrExtensionMap) const {
RtpHeaderExtensionMap* ptrExtensionMap,
bool secured) const {
const ptrdiff_t length = _ptrRTPDataEnd - _ptrRTPDataBegin;
if (length < kRtpMinParseLength) {
return false;
@ -224,7 +225,8 @@ bool RtpHeaderParser::Parse(RTPHeader* header,
header->headerLength = 12 + (CC * 4);
// not a full validation, just safety against underflow. Padding must
// start after the header. We can have 0 payload bytes left, note.
if (header->paddingLength + header->headerLength > (size_t) length) {
if (!secured &&
(header->paddingLength + header->headerLength > (size_t) length)) {
return false;
}

View File

@ -49,7 +49,8 @@ class RtpHeaderParser {
bool RTCP() const;
bool ParseRtcp(RTPHeader* header) const;
bool Parse(RTPHeader* parsedPacket,
RtpHeaderExtensionMap* ptrExtensionMap = nullptr) const;
RtpHeaderExtensionMap* ptrExtensionMap = nullptr,
bool secured = false) const;
private:
void ParseOneByteExtensionHeader(RTPHeader* parsedPacket,