Fix no_size_t_to_int_warning in rtp_rtcp:rtp_rtcp_format target Change types in interface to plain int. When putting values into raw buffer / structures with small types, use rtc::dchecked_cast. BUG=webrtc:1348 Review-Url: https://codereview.webrtc.org/3013623002 Cr-Original-Commit-Position: refs/heads/master@{#19813} Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc Cr-Mirrored-Commit: 772bd8b6a7d232c94b1d2b1d37ec7e1f9515c7a7
diff --git a/modules/rtp_rtcp/BUILD.gn b/modules/rtp_rtcp/BUILD.gn index 261446c..82bd16d 100644 --- a/modules/rtp_rtcp/BUILD.gn +++ b/modules/rtp_rtcp/BUILD.gn
@@ -34,9 +34,6 @@ "../../rtc_base:rtc_base_approved", "../../system_wrappers", ] - - # TODO(crbug.com/webrtc/1348): Fix this warning. - configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] } rtc_static_library("rtp_rtcp") {
diff --git a/modules/rtp_rtcp/include/rtp_header_extension_map.h b/modules/rtp_rtcp/include/rtp_header_extension_map.h index dcb48b6..59ab582 100644 --- a/modules/rtp_rtcp/include/rtp_header_extension_map.h +++ b/modules/rtp_rtcp/include/rtp_header_extension_map.h
@@ -29,23 +29,23 @@ class RtpHeaderExtensionMap { public: static constexpr RTPExtensionType kInvalidType = kRtpExtensionNone; - static constexpr uint8_t kInvalidId = 0; + static constexpr int kInvalidId = 0; RtpHeaderExtensionMap(); explicit RtpHeaderExtensionMap(rtc::ArrayView<const RtpExtension> extensions); template <typename Extension> - bool Register(uint8_t id) { + bool Register(int id) { return Register(id, Extension::kId, Extension::kUri); } - bool RegisterByType(uint8_t id, RTPExtensionType type); - bool RegisterByUri(uint8_t id, const std::string& uri); + bool RegisterByType(int id, RTPExtensionType type); + bool RegisterByUri(int id, const std::string& uri); bool IsRegistered(RTPExtensionType type) const { return GetId(type) != kInvalidId; } // Return kInvalidType if not found. - RTPExtensionType GetType(uint8_t id) const { + RTPExtensionType GetType(int id) const { RTC_DCHECK_GE(id, kMinId); RTC_DCHECK_LE(id, kMaxId); return types_[id]; @@ -61,15 +61,15 @@ rtc::ArrayView<const RtpExtensionSize> extensions) const; // TODO(danilchap): Remove use of the functions below. - int32_t Register(RTPExtensionType type, uint8_t id) { + int32_t Register(RTPExtensionType type, int id) { return RegisterByType(id, type) ? 0 : -1; } int32_t Deregister(RTPExtensionType type); private: - static constexpr uint8_t kMinId = 1; - static constexpr uint8_t kMaxId = 14; - bool Register(uint8_t id, RTPExtensionType type, const char* uri); + static constexpr int kMinId = 1; + static constexpr int kMaxId = 14; + bool Register(int id, RTPExtensionType type, const char* uri); RTPExtensionType types_[kMaxId + 1]; uint8_t ids_[kRtpExtensionNumberOfExtensions];
diff --git a/modules/rtp_rtcp/source/rtp_header_extension_map.cc b/modules/rtp_rtcp/source/rtp_header_extension_map.cc index 3d48ef0..6cdcc1f 100644 --- a/modules/rtp_rtcp/source/rtp_header_extension_map.cc +++ b/modules/rtp_rtcp/source/rtp_header_extension_map.cc
@@ -51,9 +51,9 @@ } // namespace constexpr RTPExtensionType RtpHeaderExtensionMap::kInvalidType; -constexpr uint8_t RtpHeaderExtensionMap::kInvalidId; -constexpr uint8_t RtpHeaderExtensionMap::kMinId; -constexpr uint8_t RtpHeaderExtensionMap::kMaxId; +constexpr int RtpHeaderExtensionMap::kInvalidId; +constexpr int RtpHeaderExtensionMap::kMinId; +constexpr int RtpHeaderExtensionMap::kMaxId; RtpHeaderExtensionMap::RtpHeaderExtensionMap() { for (auto& type : types_) @@ -69,7 +69,7 @@ RegisterByUri(extension.id, extension.uri); } -bool RtpHeaderExtensionMap::RegisterByType(uint8_t id, RTPExtensionType type) { +bool RtpHeaderExtensionMap::RegisterByType(int id, RTPExtensionType type) { for (const ExtensionInfo& extension : kExtensions) if (type == extension.type) return Register(id, extension.type, extension.uri); @@ -77,12 +77,12 @@ return false; } -bool RtpHeaderExtensionMap::RegisterByUri(uint8_t id, const std::string& uri) { +bool RtpHeaderExtensionMap::RegisterByUri(int id, const std::string& uri) { for (const ExtensionInfo& extension : kExtensions) if (uri == extension.uri) return Register(id, extension.type, extension.uri); LOG(LS_WARNING) << "Unknown extension uri:'" << uri - << "', id: " << static_cast<int>(id) << '.'; + << "', id: " << id << '.'; return false; } @@ -114,7 +114,7 @@ return 0; } -bool RtpHeaderExtensionMap::Register(uint8_t id, +bool RtpHeaderExtensionMap::Register(int id, RTPExtensionType type, const char* uri) { RTC_DCHECK_GT(type, kRtpExtensionNone); @@ -122,19 +122,19 @@ if (id < kMinId || id > kMaxId) { LOG(LS_WARNING) << "Failed to register extension uri:'" << uri - << "' with invalid id:" << static_cast<int>(id) << "."; + << "' with invalid id:" << id << "."; return false; } if (GetType(id) == type) { // Same type/id pair already registered. LOG(LS_VERBOSE) << "Reregistering extension uri:'" << uri - << "', id:" << static_cast<int>(id); + << "', id:" << id; return true; } if (GetType(id) != kInvalidType) { // |id| used by another extension type. LOG(LS_WARNING) << "Failed to register extension uri:'" << uri - << "', id:" << static_cast<int>(id) + << "', id:" << id << ". Id already in use by extension type " << static_cast<int>(GetType(id)); return false; @@ -142,7 +142,8 @@ RTC_DCHECK(!IsRegistered(type)); types_[id] = type; - ids_[type] = id; + // There is a run-time check above id fits into uint8_t. + ids_[type] = static_cast<uint8_t>(id); return true; }
diff --git a/modules/rtp_rtcp/source/rtp_packet.cc b/modules/rtp_rtcp/source/rtp_packet.cc index 7df6005..ba0a6ae 100644 --- a/modules/rtp_rtcp/source/rtp_packet.cc +++ b/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 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() {} 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 @@ 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 @@ 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 @@ } 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<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);
diff --git a/modules/rtp_rtcp/source/rtp_packet.h b/modules/rtp_rtcp/source/rtp_packet.h index 5a02f6c..09a1887 100644 --- a/modules/rtp_rtcp/source/rtp_packet.h +++ b/modules/rtp_rtcp/source/rtp_packet.h
@@ -26,7 +26,7 @@ public: using ExtensionType = RTPExtensionType; using ExtensionManager = RtpHeaderExtensionMap; - static constexpr size_t kMaxExtensionHeaders = 14; + static constexpr int kMaxExtensionHeaders = 14; static constexpr int kMinExtensionId = 1; static constexpr int kMaxExtensionId = 14;
diff --git a/modules/rtp_rtcp/source/rtp_packet_received.cc b/modules/rtp_rtcp/source/rtp_packet_received.cc index 82a4f68..0d3fdd1 100644 --- a/modules/rtp_rtcp/source/rtp_packet_received.cc +++ b/modules/rtp_rtcp/source/rtp_packet_received.cc
@@ -13,6 +13,7 @@ #include <vector> #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h" +#include "webrtc/rtc_base/safe_conversions.h" namespace webrtc { @@ -23,7 +24,7 @@ header->timestamp = Timestamp(); header->ssrc = Ssrc(); std::vector<uint32_t> csrcs = Csrcs(); - header->numCSRCs = csrcs.size(); + header->numCSRCs = rtc::dchecked_cast<uint8_t>(csrcs.size()); for (size_t i = 0; i < csrcs.size(); ++i) { header->arrOfCSRCs[i] = csrcs[i]; }