mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 00:05:36 +00:00
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:
parent
9235487cb3
commit
1e1b47f60a
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user