Return false if PeerConnection::GetStats() is called on invalid tracks
Before calling StatsCollctor::GetStats() in PeerConnection::GetStats(), check if the track is valid. If not, return false.
A track is invalid if it is not a nullptr and there is no report data for it.
BUG=webrtc:6652
Review-Url: https://codereview.webrtc.org/2470023004
Cr-Commit-Position: refs/heads/master@{#14934}
diff --git a/webrtc/api/peerconnection.cc b/webrtc/api/peerconnection.cc
index 34beeff..3fdbefb 100644
--- a/webrtc/api/peerconnection.cc
+++ b/webrtc/api/peerconnection.cc
@@ -886,6 +886,13 @@
}
stats_->UpdateStats(level);
+ // The StatsCollector is used to tell if a track is valid because it may
+ // remember tracks that the PeerConnection previously removed.
+ if (track && !stats_->IsValidTrack(track->id())) {
+ LOG(LS_WARNING) << "GetStats is called with an invalid track: "
+ << track->id();
+ return false;
+ }
signaling_thread()->Post(RTC_FROM_HERE, this, MSG_GETSTATS,
new GetStatsMsg(observer, track));
return true;