diff options
Diffstat (limited to 'talk/media/sctp/sctpdataengine.cc')
-rw-r--r-- | talk/media/sctp/sctpdataengine.cc | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/talk/media/sctp/sctpdataengine.cc b/talk/media/sctp/sctpdataengine.cc index c88882d42d..3753cd22c0 100644 --- a/talk/media/sctp/sctpdataengine.cc +++ b/talk/media/sctp/sctpdataengine.cc @@ -36,6 +36,7 @@ #include "talk/media/base/constants.h" #include "talk/media/base/streamparams.h" #include "usrsctplib/usrsctp.h" +#include "webrtc/base/arraysize.h" #include "webrtc/base/buffer.h" #include "webrtc/base/helpers.h" #include "webrtc/base/logging.h" @@ -76,7 +77,7 @@ std::string ListFlags(int flags) { MAKEFLAG(SCTP_STREAM_CHANGE_DENIED) }; #undef MAKEFLAG - for (int i = 0; i < ARRAY_SIZE(flaginfo); ++i) { + for (int i = 0; i < arraysize(flaginfo); ++i) { if (flags & flaginfo[i].value) { if (!first) result << " | "; result << flaginfo[i].name; @@ -473,7 +474,7 @@ bool SctpDataMediaChannel::OpenSctpSocket() { struct sctp_event event = {0}; event.se_assoc_id = SCTP_ALL_ASSOC; event.se_on = 1; - for (size_t i = 0; i < ARRAY_SIZE(event_types); i++) { + for (size_t i = 0; i < arraysize(event_types); i++) { event.se_type = event_types[i]; if (usrsctp_setsockopt(sock_, IPPROTO_SCTP, SCTP_EVENT, &event, sizeof(event)) < 0) { @@ -728,7 +729,13 @@ bool SctpDataMediaChannel::AddStream(const StreamParams& stream) { } const uint32_t ssrc = stream.first_ssrc(); - if (open_streams_.find(ssrc) != open_streams_.end()) { + if (ssrc >= cricket::kMaxSctpSid) { + LOG(LS_WARNING) << debug_name_ << "->Add(Send|Recv)Stream(...): " + << "Not adding data stream '" << stream.id + << "' with ssrc=" << ssrc + << " because stream ssrc is too high."; + return false; + } else if (open_streams_.find(ssrc) != open_streams_.end()) { LOG(LS_WARNING) << debug_name_ << "->Add(Send|Recv)Stream(...): " << "Not adding data stream '" << stream.id << "' with ssrc=" << ssrc |