From c3d2bd28a3e8badc434a5081dd36f4ac41b4e3f2 Mon Sep 17 00:00:00 2001 From: "pbos@webrtc.org" Date: Tue, 12 Aug 2014 20:55:10 +0000 Subject: [PATCH] Fix GetStats() crash. GetStats() can be called before codecs are set and the underlying webrtc::VideoSendStream is created, leading to a null-pointer dereference. BUG=1788 R=pthatcher@webrtc.org Review URL: https://webrtc-codereview.appspot.com/14099004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@6876 4adac7df-926f-26a2-2b94-8c16560cd09d --- talk/media/webrtc/webrtcvideoengine2.cc | 4 ++++ talk/media/webrtc/webrtcvideoengine2_unittest.cc | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/talk/media/webrtc/webrtcvideoengine2.cc b/talk/media/webrtc/webrtcvideoengine2.cc index 0bf3b51c3d..2cd22291ad 100644 --- a/talk/media/webrtc/webrtcvideoengine2.cc +++ b/talk/media/webrtc/webrtcvideoengine2.cc @@ -1592,6 +1592,10 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::GetVideoSenderInfo() { info.add_ssrc(parameters_.config.rtp.ssrcs[i]); } + if (stream_ == NULL) { + return info; + } + webrtc::VideoSendStream::Stats stats = stream_->GetStats(); info.framerate_input = stats.input_frame_rate; info.framerate_sent = stats.encode_frame_rate; diff --git a/talk/media/webrtc/webrtcvideoengine2_unittest.cc b/talk/media/webrtc/webrtcvideoengine2_unittest.cc index 1ce41a7a4b..5953f348d5 100644 --- a/talk/media/webrtc/webrtcvideoengine2_unittest.cc +++ b/talk/media/webrtc/webrtcvideoengine2_unittest.cc @@ -455,6 +455,13 @@ TEST_F(WebRtcVideoEngine2Test, SetSendFailsBeforeSettingCodecs) { << "Channel should be stoppable even without set codecs."; } +TEST_F(WebRtcVideoEngine2Test, GetStatsWithoutSendCodecsSetDoesNotCrash) { + rtc::scoped_ptr channel(engine_.CreateChannel(NULL)); + EXPECT_TRUE(channel->AddSendStream(StreamParams::CreateLegacy(123))); + VideoMediaInfo info; + channel->GetStats(&info); +} + class WebRtcVideoEngine2BaseTest : public VideoEngineTest { protected: