Index: webrtc/modules/rtp_rtcp/source/rtp_packet.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_packet.cc b/webrtc/modules/rtp_rtcp/source/rtp_packet.cc |
index 7df60053fb8e206e6d9ed0a6af12b1ecffacc66d..ba0a6ae769620d6386e00d57b402fb24e49e60c4 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtp_packet.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtp_packet.cc |
@@ -19,6 +19,7 @@ |
#include "webrtc/rtc_base/checks.h" |
#include "webrtc/rtc_base/logging.h" |
#include "webrtc/rtc_base/random.h" |
+#include "webrtc/rtc_base/safe_conversions.h" |
namespace webrtc { |
namespace rtp { |
@@ -30,7 +31,7 @@ constexpr size_t kOneByteHeaderSize = 1; |
constexpr size_t kDefaultPacketSize = 1500; |
} // namespace |
-constexpr size_t Packet::kMaxExtensionHeaders; |
+constexpr int Packet::kMaxExtensionHeaders; |
constexpr int Packet::kMinExtensionId; |
constexpr int Packet::kMaxExtensionId; |
@@ -78,7 +79,7 @@ Packet::Packet(const ExtensionManager* extensions, size_t capacity) |
Packet::~Packet() {} |
void Packet::IdentifyExtensions(const ExtensionManager& extensions) { |
- for (size_t i = 0; i < kMaxExtensionHeaders; ++i) |
+ for (int i = 0; i < kMaxExtensionHeaders; ++i) |
extension_entries_[i].type = extensions.GetType(i + 1); |
} |
@@ -242,7 +243,7 @@ void Packet::SetCsrcs(const std::vector<uint32_t>& csrcs) { |
RTC_DCHECK_LE(csrcs.size(), 0x0fu); |
RTC_DCHECK_LE(kFixedHeaderSize + 4 * csrcs.size(), capacity()); |
payload_offset_ = kFixedHeaderSize + 4 * csrcs.size(); |
- WriteAt(0, (data()[0] & 0xF0) | csrcs.size()); |
+ WriteAt(0, (data()[0] & 0xF0) | rtc::dchecked_cast<uint8_t>(csrcs.size())); |
size_t offset = kFixedHeaderSize; |
for (uint32_t csrc : csrcs) { |
ByteWriter<uint32_t>::WriteBigEndian(WriteAt(offset), csrc); |
@@ -328,12 +329,14 @@ rtc::ArrayView<uint8_t> Packet::AllocateRawExtension(int id, size_t length) { |
kOneByteExtensionId); |
} |
- WriteAt(extensions_offset + extensions_size_, (id << 4) | (length - 1)); |
+ uint8_t one_byte_header = rtc::dchecked_cast<uint8_t>(id) << 4; |
+ one_byte_header |= rtc::dchecked_cast<uint8_t>(length - 1); |
+ WriteAt(extensions_offset + extensions_size_, one_byte_header); |
- extension_entry->offset = |
- extensions_offset + extensions_size_ + kOneByteHeaderSize; |
- extension_entry->length = length; |
- extensions_size_ = new_extensions_size; |
+ extension_entry->offset = rtc::dchecked_cast<uint16_t>( |
+ extensions_offset + extensions_size_ + kOneByteHeaderSize); |
+ extension_entry->length = rtc::dchecked_cast<uint8_t>(length); |
+ extensions_size_ = rtc::dchecked_cast<uint16_t>(new_extensions_size); |
// Update header length field. |
uint16_t extensions_words = (extensions_size_ + 3) / 4; // Wrap up to 32bit. |
@@ -497,8 +500,9 @@ bool Packet::ParseBuffer(const uint8_t* buffer, size_t size) { |
} |
extensions_size_ += kOneByteHeaderSize; |
- extension_entries_[idx].offset = extension_offset + extensions_size_; |
- extension_entries_[idx].length = length; |
+ extension_entries_[idx].offset = |
+ rtc::dchecked_cast<uint16_t>(extension_offset + extensions_size_); |
+ extension_entries_[idx].length = rtc::dchecked_cast<uint16_t>(length); |
extensions_size_ += length; |
} |
} |
@@ -527,7 +531,7 @@ rtc::ArrayView<const uint8_t> Packet::FindExtension(ExtensionType type) const { |
rtc::ArrayView<uint8_t> Packet::AllocateExtension(ExtensionType type, |
size_t length) { |
- for (size_t i = 0; i < kMaxExtensionHeaders; ++i) { |
+ for (int i = 0; i < kMaxExtensionHeaders; ++i) { |
if (extension_entries_[i].type == type) { |
int extension_id = i + 1; |
return AllocateRawExtension(extension_id, length); |