Skip to content

Commit 3fe8b0d

Browse files
Harald AlvestrandWebRTC LUCI CQ
authored andcommitted
Do not allow simulcast to be turned off using SDP munging
This is an error that puts the PC into an inconsistent state, so causing a crash is the right thing to do. Bug: chromium:1341043 Change-Id: Ie1eb89400ad87f0c83634b7073236b07e92ec7ab Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/267281 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Henrik Boström <hbos@webrtc.org> Commit-Queue: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37391}
1 parent de7fcff commit 3fe8b0d

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

pc/rtp_sender.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,8 @@ void RtpSenderBase::SetSsrc(uint32_t ssrc) {
316316
// we need to copy.
317317
RtpParameters current_parameters =
318318
media_channel_->GetRtpSendParameters(ssrc_);
319-
RTC_DCHECK_GE(current_parameters.encodings.size(),
320-
init_parameters_.encodings.size());
319+
RTC_CHECK_GE(current_parameters.encodings.size(),
320+
init_parameters_.encodings.size());
321321
for (size_t i = 0; i < init_parameters_.encodings.size(); ++i) {
322322
init_parameters_.encodings[i].ssrc =
323323
current_parameters.encodings[i].ssrc;

pc/rtp_sender_receiver_unittest.cc

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1150,6 +1150,44 @@ TEST_F(RtpSenderReceiverTest,
11501150
DestroyVideoRtpSender();
11511151
}
11521152

1153+
#if GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
1154+
using RtpSenderReceiverDeathTest = RtpSenderReceiverTest;
1155+
1156+
TEST_F(RtpSenderReceiverDeathTest,
1157+
VideoSenderManualRemoveSimulcastFailsDeathTest) {
1158+
AddVideoTrack(false);
1159+
1160+
std::unique_ptr<MockSetStreamsObserver> set_streams_observer =
1161+
std::make_unique<MockSetStreamsObserver>();
1162+
video_rtp_sender_ = VideoRtpSender::Create(worker_thread_, video_track_->id(),
1163+
set_streams_observer.get());
1164+
ASSERT_TRUE(video_rtp_sender_->SetTrack(video_track_.get()));
1165+
EXPECT_CALL(*set_streams_observer, OnSetStreams());
1166+
video_rtp_sender_->SetStreams({local_stream_->id()});
1167+
1168+
std::vector<RtpEncodingParameters> init_encodings(2);
1169+
init_encodings[0].max_bitrate_bps = 60000;
1170+
init_encodings[1].max_bitrate_bps = 120000;
1171+
video_rtp_sender_->set_init_send_encodings(init_encodings);
1172+
1173+
RtpParameters params = video_rtp_sender_->GetParameters();
1174+
ASSERT_EQ(2u, params.encodings.size());
1175+
EXPECT_EQ(params.encodings[0].max_bitrate_bps, 60000);
1176+
1177+
// Simulate the setLocalDescription call as if the user used SDP munging
1178+
// to disable simulcast.
1179+
std::vector<uint32_t> ssrcs;
1180+
ssrcs.reserve(2);
1181+
for (int i = 0; i < 2; ++i)
1182+
ssrcs.push_back(kVideoSsrcSimulcast + i);
1183+
cricket::StreamParams stream_params =
1184+
cricket::StreamParams::CreateLegacy(kVideoSsrc);
1185+
video_media_channel()->AddSendStream(stream_params);
1186+
video_rtp_sender_->SetMediaChannel(video_media_channel());
1187+
EXPECT_DEATH(video_rtp_sender_->SetSsrc(kVideoSsrcSimulcast), "");
1188+
}
1189+
#endif
1190+
11531191
TEST_F(RtpSenderReceiverTest,
11541192
VideoSenderMustCallGetParametersBeforeSetParametersBeforeNegotiation) {
11551193
video_rtp_sender_ =

0 commit comments

Comments
 (0)