From d935f912b10e91f9c258b6d9d85594ff2ca7186a Mon Sep 17 00:00:00 2001 From: Joachim Bauch Date: Fri, 29 May 2015 22:14:21 +0200 Subject: [PATCH] Don't try to parse empty Ice urls. https://crrev.com/7c4e7458b5ce99c13a75d5be7d718ef94e2f8f9f added support to pass a list of urls for IceServer configurations. This CL fixes a potential crash when empty urls are passed. BUG=2096 R=tommi@webrtc.org Review URL: https://webrtc-codereview.appspot.com/51969004 Cr-Commit-Position: refs/heads/master@{#9334} --- talk/app/webrtc/peerconnection.cc | 5 +++++ talk/app/webrtc/peerconnectionfactory_unittest.cc | 1 + 2 files changed, 6 insertions(+) diff --git a/talk/app/webrtc/peerconnection.cc b/talk/app/webrtc/peerconnection.cc index aba2d62b4a..4c54d6f5fe 100644 --- a/talk/app/webrtc/peerconnection.cc +++ b/talk/app/webrtc/peerconnection.cc @@ -186,6 +186,7 @@ bool ParseIceServerUrl(const PeerConnectionInterface::IceServer& server, // turn-port = *DIGIT std::vector tokens; std::string turn_transport_type = kUdpTransportType; + ASSERT(!url.empty()); rtc::tokenize(url, '?', &tokens); std::string uri_without_transport = tokens[0]; // Let's look into transport= param, if it exists. @@ -286,6 +287,10 @@ bool ParseIceServers(const PeerConnectionInterface::IceServers& servers, for (const webrtc::PeerConnectionInterface::IceServer& server : servers) { if (!server.urls.empty()) { for (const std::string& url : server.urls) { + if (url.empty()) { + LOG(WARNING) << "Empty uri."; + continue; + } if (!ParseIceServerUrl(server, url, stun_config, turn_config)) { return false; } diff --git a/talk/app/webrtc/peerconnectionfactory_unittest.cc b/talk/app/webrtc/peerconnectionfactory_unittest.cc index 597a1740ca..8088588852 100644 --- a/talk/app/webrtc/peerconnectionfactory_unittest.cc +++ b/talk/app/webrtc/peerconnectionfactory_unittest.cc @@ -203,6 +203,7 @@ TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServers) { TEST_F(PeerConnectionFactoryTest, CreatePCUsingIceServersUrls) { PeerConnectionInterface::RTCConfiguration config; webrtc::PeerConnectionInterface::IceServer ice_server; + ice_server.urls.push_back(""); // Empty URLs should be ignored. ice_server.urls.push_back(kStunIceServer); ice_server.urls.push_back(kTurnIceServer); ice_server.urls.push_back(kTurnIceServerWithTransport);