From c51fb9348df603f64dc37c88cb973cfed84394f7 Mon Sep 17 00:00:00 2001 From: "guoweis@webrtc.org" Date: Thu, 18 Dec 2014 00:30:55 +0000 Subject: [PATCH] Fix an assert failure caused by race condition BUG= R=pbos@webrtc.org, pthatcher@webrtc.org Review URL: https://webrtc-codereview.appspot.com/36579004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7938 4adac7df-926f-26a2-2b94-8c16560cd09d --- webrtc/p2p/base/turnport.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/webrtc/p2p/base/turnport.cc b/webrtc/p2p/base/turnport.cc index a22b46568..e564db346 100644 --- a/webrtc/p2p/base/turnport.cc +++ b/webrtc/p2p/base/turnport.cc @@ -442,7 +442,17 @@ void TurnPort::OnReadPacket( const rtc::SocketAddress& remote_addr, const rtc::PacketTime& packet_time) { ASSERT(socket == socket_); - ASSERT(remote_addr == server_address_.address); + + // This is to guard against a STUN response from previous server after + // alternative server redirection. TODO(guoweis): add a unit test for this + // race condition. + if (remote_addr != server_address_.address) { + LOG_J(LS_WARNING, this) << "Discarding TURN message from unknown address:" + << remote_addr.ToString() + << ", server_address_:" + << server_address_.address.ToString(); + return; + } // The message must be at least the size of a channel header. if (size < TURN_CHANNEL_HEADER_SIZE) {