From d58ac5adf887a2bc96d75b1c0fb6fef17889ac80 Mon Sep 17 00:00:00 2001 From: Philipp Hancke Date: Thu, 25 Nov 2021 08:57:54 +0100 Subject: [PATCH] sdp: reject large number of channels the maximum used in practice is multiopus with 6 or 8 channels. 24 is the maximum number of channels supported in the audio decoder. BUG=chromium:1265806 Change-Id: Iba8e3185a1f235b846fed9c154e66fb3983664ed Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/238980 Reviewed-by: Harald Alvestrand Commit-Queue: Philipp Hancke Cr-Commit-Position: refs/heads/main@{#35440} --- pc/webrtc_sdp.cc | 7 +++++++ pc/webrtc_sdp_unittest.cc | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/pc/webrtc_sdp.cc b/pc/webrtc_sdp.cc index f95983b4e6..3f06f307a4 100644 --- a/pc/webrtc_sdp.cc +++ b/pc/webrtc_sdp.cc @@ -257,6 +257,9 @@ static const char kDefaultSctpmapProtocol[] = "webrtc-datachannel"; // types. const int kWildcardPayloadType = -1; +// Maximum number of channels allowed. +static const size_t kMaxNumberOfChannels = 24; + struct SsrcInfo { uint32_t ssrc_id; std::string cname; @@ -3628,6 +3631,10 @@ bool ParseRtpmapAttribute(const std::string& line, return false; } } + if (channels > kMaxNumberOfChannels) { + return ParseFailed(line, "At most 24 channels are supported.", error); + } + AudioContentDescription* audio_desc = media_desc->as_audio(); UpdateCodec(payload_type, encoding_name, clock_rate, 0, channels, audio_desc); diff --git a/pc/webrtc_sdp_unittest.cc b/pc/webrtc_sdp_unittest.cc index 883249c20c..21d682315e 100644 --- a/pc/webrtc_sdp_unittest.cc +++ b/pc/webrtc_sdp_unittest.cc @@ -4694,3 +4694,15 @@ TEST_F(WebRtcSdpTest, IllegalMidCharacterValue) { Replace("a=mid:", "a=mid:[]", &sdp); ExpectParseFailure(std::string(sdp), "a=mid:[]"); } + +TEST_F(WebRtcSdpTest, MaxChannels) { + std::string sdp = + "v=0\r\n" + "o=- 11 22 IN IP4 127.0.0.1\r\n" + "s=-\r\n" + "t=0 0\r\n" + "m=audio 49232 RTP/AVP 108\r\n" + "a=rtpmap:108 ISAC/16000/512\r\n"; + + ExpectParseFailure(sdp, "a=rtpmap:108 ISAC/16000/512"); +}