summaryrefslogtreecommitdiff
path: root/p2p
diff options
context:
space:
mode:
authorbuildbot@webrtc.org <buildbot@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2014-05-23 17:33:05 +0000
committerbuildbot@webrtc.org <buildbot@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2014-05-23 17:33:05 +0000
commit3922cbc3a79d8ed6052eaeaf3e3f297096162f10 (patch)
treede81a5d32d3d889323548f7ca207fa2afc40fd07 /p2p
parent738caf8c9c167fc2f47e75644df67fc44487ff86 (diff)
downloadtalk-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.cc4
-rw-r--r--p2p/base/constants.h4
-rw-r--r--p2p/base/transport.cc30
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);