From af5ca5af7573c34483192d8a42fce61584b168ad Mon Sep 17 00:00:00 2001 From: Emil Lundmark Date: Tue, 30 Nov 2021 10:37:25 +0100 Subject: [PATCH] Fix potential use after move in RtpVideoStreamReceiver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a frame is assembled `packet_infos` is moved and must be re-initialized before potentially being used in another iteration of the loop. Clear `packet_infos` immediately instead of relying on it being implicitly cleared in the next iteration of the loop. Bug: None Change-Id: I954aaa0c6df296cc2a27b3ab496e49fac200f135 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/238981 Reviewed-by: Philip Eliasson Reviewed-by: Danil Chapovalov Reviewed-by: Åsa Persson Commit-Queue: Emil Lundmark Cr-Commit-Position: refs/heads/main@{#35441} --- video/rtp_video_stream_receiver.cc | 4 ++-- video/rtp_video_stream_receiver2.cc | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/video/rtp_video_stream_receiver.cc b/video/rtp_video_stream_receiver.cc index 8f89a6cbfa..5a1b90be36 100644 --- a/video/rtp_video_stream_receiver.cc +++ b/video/rtp_video_stream_receiver.cc @@ -780,8 +780,6 @@ void RtpVideoStreamReceiver::OnInsertedPacket( max_nack_count = packet->times_nacked; min_recv_time = packet_info.receive_time().ms(); max_recv_time = packet_info.receive_time().ms(); - payloads.clear(); - packet_infos.clear(); } else { max_nack_count = std::max(max_nack_count, packet->times_nacked); min_recv_time = @@ -824,6 +822,8 @@ void RtpVideoStreamReceiver::OnInsertedPacket( last_packet.video_header.color_space, // RtpPacketInfos(std::move(packet_infos)), // std::move(bitstream))); + payloads.clear(); + packet_infos.clear(); } } RTC_DCHECK(frame_boundary); diff --git a/video/rtp_video_stream_receiver2.cc b/video/rtp_video_stream_receiver2.cc index 2519da2b0a..78ab9a4266 100644 --- a/video/rtp_video_stream_receiver2.cc +++ b/video/rtp_video_stream_receiver2.cc @@ -731,8 +731,6 @@ void RtpVideoStreamReceiver2::OnInsertedPacket( max_nack_count = packet->times_nacked; min_recv_time = packet_info.receive_time().ms(); max_recv_time = packet_info.receive_time().ms(); - payloads.clear(); - packet_infos.clear(); } else { max_nack_count = std::max(max_nack_count, packet->times_nacked); min_recv_time = std::min(min_recv_time, packet_info.receive_time().ms()); @@ -772,6 +770,8 @@ void RtpVideoStreamReceiver2::OnInsertedPacket( last_packet.video_header.color_space, // RtpPacketInfos(std::move(packet_infos)), // std::move(bitstream))); + payloads.clear(); + packet_infos.clear(); } } RTC_DCHECK(frame_boundary);