diff options
author | buildbot@webrtc.org <buildbot@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-05-23 17:33:05 +0000 |
---|---|---|
committer | buildbot@webrtc.org <buildbot@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-05-23 17:33:05 +0000 |
commit | 3922cbc3a79d8ed6052eaeaf3e3f297096162f10 (patch) | |
tree | de81a5d32d3d889323548f7ca207fa2afc40fd07 /p2p | |
parent | 738caf8c9c167fc2f47e75644df67fc44487ff86 (diff) | |
download | talk-3922cbc3a79d8ed6052eaeaf3e3f297096162f10.tar.gz |
(Auto)update libjingle 67848628-> 67848776
git-svn-id: http://webrtc.googlecode.com/svn/trunk/talk@6237 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'p2p')
-rw-r--r-- | p2p/base/constants.cc | 4 | ||||
-rw-r--r-- | p2p/base/constants.h | 4 | ||||
-rw-r--r-- | p2p/base/transport.cc | 30 |
3 files changed, 36 insertions, 2 deletions
diff --git a/p2p/base/constants.cc b/p2p/base/constants.cc index 14cac88..2e57d9d 100644 --- a/p2p/base/constants.cc +++ b/p2p/base/constants.cc @@ -176,6 +176,10 @@ const int ICE_UFRAG_LENGTH = 16; // Minimum password length of 22 characters as per RFC5245. We chose 24 because // some internal systems expect password to be multiple of 4. const int ICE_PWD_LENGTH = 24; +const size_t ICE_UFRAG_MIN_LENGTH = 4; +const size_t ICE_PWD_MIN_LENGTH = 22; +const size_t ICE_UFRAG_MAX_LENGTH = 255; +const size_t ICE_PWD_MAX_LENGTH = 256; // TODO: This is media-specific, so might belong // somewhere like media/base/constants.h const int ICE_CANDIDATE_COMPONENT_RTP = 1; diff --git a/p2p/base/constants.h b/p2p/base/constants.h index 99e006a..61dd815 100644 --- a/p2p/base/constants.h +++ b/p2p/base/constants.h @@ -178,6 +178,10 @@ extern const char ICE_CANDIDATE_TYPE_PEER_STUN[]; extern const char ICE_CANDIDATE_TYPE_SERVER_STUN[]; extern const int ICE_UFRAG_LENGTH; extern const int ICE_PWD_LENGTH; +extern const size_t ICE_UFRAG_MIN_LENGTH; +extern const size_t ICE_PWD_MIN_LENGTH; +extern const size_t ICE_UFRAG_MAX_LENGTH; +extern const size_t ICE_PWD_MAX_LENGTH; extern const int ICE_CANDIDATE_COMPONENT_RTP; extern const int ICE_CANDIDATE_COMPONENT_RTCP; extern const int ICE_CANDIDATE_COMPONENT_DEFAULT; diff --git a/p2p/base/transport.cc b/p2p/base/transport.cc index 8261f72..16087e3 100644 --- a/p2p/base/transport.cc +++ b/p2p/base/transport.cc @@ -94,6 +94,22 @@ static std::string IceProtoToString(TransportProtocol proto) { return proto_str; } +static bool VerifyIceParams(const TransportDescription& desc) { + // For legacy protocols. + if (desc.ice_ufrag.empty() && desc.ice_pwd.empty()) + return true; + + if (desc.ice_ufrag.length() < ICE_UFRAG_MIN_LENGTH || + desc.ice_ufrag.length() > ICE_UFRAG_MAX_LENGTH) { + return false; + } + if (desc.ice_pwd.length() < ICE_PWD_MIN_LENGTH || + desc.ice_pwd.length() > ICE_PWD_MAX_LENGTH) { + return false; + } + return true; +} + bool BadTransportDescription(const std::string& desc, std::string* err_desc) { if (err_desc) { *err_desc = desc; @@ -704,8 +720,13 @@ bool Transport::SetLocalTransportDescription_w( std::string* error_desc) { bool ret = true; talk_base::CritScope cs(&crit_); - local_description_.reset(new TransportDescription(desc)); + if (!VerifyIceParams(desc)) { + return BadTransportDescription("Invalid ice-ufrag or ice-pwd length", + error_desc); + } + + local_description_.reset(new TransportDescription(desc)); for (ChannelMap::iterator iter = channels_.begin(); iter != channels_.end(); ++iter) { ret &= ApplyLocalTransportDescription_w(iter->second.get(), error_desc); @@ -726,8 +747,13 @@ bool Transport::SetRemoteTransportDescription_w( std::string* error_desc) { bool ret = true; talk_base::CritScope cs(&crit_); - remote_description_.reset(new TransportDescription(desc)); + if (!VerifyIceParams(desc)) { + return BadTransportDescription("Invalid ice-ufrag or ice-pwd length", + error_desc); + } + + remote_description_.reset(new TransportDescription(desc)); for (ChannelMap::iterator iter = channels_.begin(); iter != channels_.end(); ++iter) { ret &= ApplyRemoteTransportDescription_w(iter->second.get(), error_desc); |