Index: extensions/renderer/api/display_source/wifi_display/wifi_display_elementary_stream_packetizer.cc |
diff --git a/extensions/renderer/api/display_source/wifi_display/wifi_display_elementary_stream_packetizer.cc b/extensions/renderer/api/display_source/wifi_display/wifi_display_elementary_stream_packetizer.cc |
index 39a6e3fcaf8daea049aa38353c0c0019c71c10b6..87c3d5c26dfb5b05ed7e91d53171200b1fc86e64 100644 |
--- a/extensions/renderer/api/display_source/wifi_display/wifi_display_elementary_stream_packetizer.cc |
+++ b/extensions/renderer/api/display_source/wifi_display/wifi_display_elementary_stream_packetizer.cc |
@@ -15,13 +15,15 @@ namespace { |
// specification. |
namespace pes { |
+const size_t kUnitDataAlignment = 4u; |
+ |
const size_t kOptionalHeaderBaseSize = 3u; |
const size_t kPacketHeaderBaseSize = 6u; |
+const size_t kStuffingBytesMaxSize = kUnitDataAlignment - 1u; |
const size_t kTimeStampSize = 5u; |
const size_t kPacketHeaderMaxSize = |
- kPacketHeaderBaseSize + kOptionalHeaderBaseSize + 2u * kTimeStampSize; |
- |
-const size_t kUnitDataAlignment = 4u; |
+ kPacketHeaderBaseSize + kOptionalHeaderBaseSize + 2u * kTimeStampSize + |
+ kStuffingBytesMaxSize; |
size_t FillInTimeStamp(uint8_t* dst, |
uint8_t pts_dts_indicator, |
@@ -85,6 +87,7 @@ size_t FillInOptionalHeader(uint8_t* dst, |
(kPacketHeaderBaseSize + i + unit_header_size) % kUnitDataAlignment; |
if (remainder) { |
const size_t n = kUnitDataAlignment - remainder; |
+ DCHECK_LE(n, kStuffingBytesMaxSize); |
std::memset(&dst[i], 0xFF, n); |
i += n; |
} |
@@ -154,13 +157,12 @@ WiFiDisplayElementaryStreamPacket::WiFiDisplayElementaryStreamPacket( |
WiFiDisplayElementaryStreamPacket::WiFiDisplayElementaryStreamPacket( |
WiFiDisplayElementaryStreamPacket&& other) |
- : header_(header_buffer_, other.header().size()), |
- unit_header_(other.unit_header().data(), other.unit_header().size()), |
- unit_(other.unit().data(), other.unit().size()) { |
- // Copy the actual header data bytes from |other.header().data()| to |
- // the |header_buffer_| member buffer used in the member initialization list. |
- std::memcpy(header_buffer_, other.header().data(), header_.size()); |
-} |
+ : WiFiDisplayElementaryStreamPacket(other.header_buffer_, |
+ other.header_.size(), |
+ other.unit_header_.data(), |
+ other.unit_header_.size(), |
+ other.unit_.data(), |
+ other.unit_.size()) {} |
// static |
WiFiDisplayElementaryStreamPacket |
@@ -180,6 +182,7 @@ WiFiDisplayElementaryStreamPacketizer::EncodeElementaryStreamUnit( |
uint8_t header_data[pes::kPacketHeaderMaxSize]; |
size_t header_size = pes::FillInPacketHeader(header_data, stream_id, pts, dts, |
unit_header_size, unit_size); |
+ DCHECK_LE(header_size, sizeof(header_data)); |
return WiFiDisplayElementaryStreamPacket(header_data, header_size, |
unit_header_data, unit_header_size, |
unit_data, unit_size); |