зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1204099: check payload type. r=bwc
MozReview-Commit-ID: 1QEDswjrGuo --HG-- extra : rebase_source : f77de71a1b8231c5b005abd2b5bba6d28ba71469
This commit is contained in:
Родитель
3b07e666f0
Коммит
050f67b249
|
@ -37,6 +37,17 @@ MOZ_MTLOG_MODULE("jsep")
|
||||||
MOZ_MTLOG(ML_ERROR, mLastError); \
|
MOZ_MTLOG(ML_ERROR, mLastError); \
|
||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
|
static std::bitset<128> GetForbiddenSdpPayloadTypes() {
|
||||||
|
std::bitset<128> forbidden(0);
|
||||||
|
forbidden[1] = true;
|
||||||
|
forbidden[2] = true;
|
||||||
|
forbidden[19] = true;
|
||||||
|
for (uint16_t i = 64; i < 96; ++i) {
|
||||||
|
forbidden[i] = true;
|
||||||
|
}
|
||||||
|
return forbidden;
|
||||||
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
JsepSessionImpl::Init()
|
JsepSessionImpl::Init()
|
||||||
{
|
{
|
||||||
|
@ -1658,6 +1669,7 @@ JsepSessionImpl::ParseSdp(const std::string& sdp, UniquePtr<Sdp>* parsedp)
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const std::bitset<128> forbidden = GetForbiddenSdpPayloadTypes();
|
||||||
if (msection.GetMediaType() == SdpMediaSection::kAudio ||
|
if (msection.GetMediaType() == SdpMediaSection::kAudio ||
|
||||||
msection.GetMediaType() == SdpMediaSection::kVideo) {
|
msection.GetMediaType() == SdpMediaSection::kVideo) {
|
||||||
// Sanity-check that payload type can work with RTP
|
// Sanity-check that payload type can work with RTP
|
||||||
|
@ -1668,6 +1680,10 @@ JsepSessionImpl::ParseSdp(const std::string& sdp, UniquePtr<Sdp>* parsedp)
|
||||||
JSEP_SET_ERROR("audio/video payload type is too large: " << fmt);
|
JSEP_SET_ERROR("audio/video payload type is too large: " << fmt);
|
||||||
return NS_ERROR_INVALID_ARG;
|
return NS_ERROR_INVALID_ARG;
|
||||||
}
|
}
|
||||||
|
if (forbidden.test(payloadType)) {
|
||||||
|
JSEP_SET_ERROR("Illegal audio/video payload type: " << fmt);
|
||||||
|
return NS_ERROR_INVALID_ARG;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2120,6 +2120,21 @@ TEST_P(JsepSessionTest, RenegotiationAnswererDisablesBundleTransport)
|
||||||
answererPairs[0].mRtpTransport.get());
|
answererPairs[0].mRtpTransport.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_P(JsepSessionTest, ParseRejectsBadMediaFormat)
|
||||||
|
{
|
||||||
|
if (GetParam() == "datachannel") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
AddTracks(mSessionOff);
|
||||||
|
std::string offer = CreateOffer();
|
||||||
|
UniquePtr<Sdp> munge(Parse(offer));
|
||||||
|
SdpMediaSection& mediaSection = munge->GetMediaSection(0);
|
||||||
|
mediaSection.AddCodec("75", "DummyFormatVal", 8000, 1);
|
||||||
|
std::string sdpString = munge->ToString();
|
||||||
|
nsresult rv = mSessionOff.SetLocalDescription(kJsepSdpOffer, sdpString);
|
||||||
|
ASSERT_EQ(NS_ERROR_INVALID_ARG, rv);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_P(JsepSessionTest, FullCallWithCandidates)
|
TEST_P(JsepSessionTest, FullCallWithCandidates)
|
||||||
{
|
{
|
||||||
AddTracks(mSessionOff);
|
AddTracks(mSessionOff);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче