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];
}