Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: cherry-pick 763d847f1e5a from webrtc #34882

Merged
merged 2 commits into from Jul 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions patches/webrtc/.patches
@@ -1,2 +1,3 @@
add_thread_local_to_x_error_trap_cc.patch
cherry-pick-a18fddcb53e6.patch
cherry-pick-763d847f1e5a.patch
93 changes: 93 additions & 0 deletions patches/webrtc/cherry-pick-763d847f1e5a.patch
@@ -0,0 +1,93 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Taylor Brandstetter <deadbeef@webrtc.org>
Date: Fri, 1 Jul 2022 12:20:05 -0700
Subject: Do not allow simulcast to be turned off using SDP munging
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This is an error that puts the PC into an inconsistent state, so
causing a crash is the right thing to do.

(cherry picked from commit 3fe8b0d9a980642ee5ebb1f9e429378b063c1f07)
TBR=hta@webrtc.org

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-Original-Commit-Position: refs/heads/main@{#37391}
No-Presubmit: true
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/267427
Commit-Queue: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Guido Urdaneta <guidou@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Cr-Commit-Position: refs/branch-heads/5005@{#9}
Cr-Branched-From: 8f9b44ba38c134e1c69126196e4d9e566ca5d5e3-refs/heads/main@{#36552}

diff --git a/pc/rtp_sender.cc b/pc/rtp_sender.cc
index 110b5aae0a01a5d612eefdc3262b20e4dd5504fe..d1355e31ab6331058cd557b0f164c903c9bc8f46 100644
--- a/pc/rtp_sender.cc
+++ b/pc/rtp_sender.cc
@@ -299,8 +299,8 @@ void RtpSenderBase::SetSsrc(uint32_t ssrc) {
// we need to copy.
RtpParameters current_parameters =
media_channel_->GetRtpSendParameters(ssrc_);
- RTC_DCHECK_GE(current_parameters.encodings.size(),
- init_parameters_.encodings.size());
+ RTC_CHECK_GE(current_parameters.encodings.size(),
+ init_parameters_.encodings.size());
for (size_t i = 0; i < init_parameters_.encodings.size(); ++i) {
init_parameters_.encodings[i].ssrc =
current_parameters.encodings[i].ssrc;
diff --git a/pc/rtp_sender_receiver_unittest.cc b/pc/rtp_sender_receiver_unittest.cc
index 2c6bc7b71a1e5e30609f382fee0b4cc30f03512e..388edbaf73f0570d895b4855bc2207afb8eff1a5 100644
--- a/pc/rtp_sender_receiver_unittest.cc
+++ b/pc/rtp_sender_receiver_unittest.cc
@@ -1157,6 +1157,44 @@ TEST_F(RtpSenderReceiverTest,
DestroyVideoRtpSender();
}

+#if GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
+using RtpSenderReceiverDeathTest = RtpSenderReceiverTest;
+
+TEST_F(RtpSenderReceiverDeathTest,
+ VideoSenderManualRemoveSimulcastFailsDeathTest) {
+ AddVideoTrack(false);
+
+ std::unique_ptr<MockSetStreamsObserver> set_streams_observer =
+ std::make_unique<MockSetStreamsObserver>();
+ video_rtp_sender_ = VideoRtpSender::Create(worker_thread_, video_track_->id(),
+ set_streams_observer.get());
+ ASSERT_TRUE(video_rtp_sender_->SetTrack(video_track_.get()));
+ EXPECT_CALL(*set_streams_observer, OnSetStreams());
+ video_rtp_sender_->SetStreams({local_stream_->id()});
+
+ std::vector<RtpEncodingParameters> init_encodings(2);
+ init_encodings[0].max_bitrate_bps = 60000;
+ init_encodings[1].max_bitrate_bps = 120000;
+ video_rtp_sender_->set_init_send_encodings(init_encodings);
+
+ RtpParameters params = video_rtp_sender_->GetParameters();
+ ASSERT_EQ(2u, params.encodings.size());
+ EXPECT_EQ(params.encodings[0].max_bitrate_bps, 60000);
+
+ // Simulate the setLocalDescription call as if the user used SDP munging
+ // to disable simulcast.
+ std::vector<uint32_t> ssrcs;
+ ssrcs.reserve(2);
+ for (int i = 0; i < 2; ++i)
+ ssrcs.push_back(kVideoSsrcSimulcast + i);
+ cricket::StreamParams stream_params =
+ cricket::StreamParams::CreateLegacy(kVideoSsrc);
+ video_media_channel_->AddSendStream(stream_params);
+ video_rtp_sender_->SetMediaChannel(video_media_channel_);
+ EXPECT_DEATH(video_rtp_sender_->SetSsrc(kVideoSsrcSimulcast), "");
+}
+#endif
+
TEST_F(RtpSenderReceiverTest,
VideoSenderMustCallGetParametersBeforeSetParametersBeforeNegotiation) {
video_rtp_sender_ =