Index: media/cast/logging/log_serializer.cc |
diff --git a/media/cast/logging/log_serializer.cc b/media/cast/logging/log_serializer.cc |
index 3452c903bf94aadfd700f6447ddddd4733fedaa1..3423d94200d65a3be05f15587dfd8aacfa27887a 100644 |
--- a/media/cast/logging/log_serializer.cc |
+++ b/media/cast/logging/log_serializer.cc |
@@ -19,6 +19,7 @@ |
#include "media/cast/logging/log_serializer.h" |
#include "base/big_endian.h" |
+#include "base/logging.h" |
#include "third_party/zlib/zlib.h" |
namespace media { |
@@ -33,6 +34,8 @@ using media::cast::proto::LogMetadata; |
// Use 30MB of temp buffer to hold uncompressed data if |compress| is true. |
const int kMaxUncompressedBytes = 30 * 1000 * 1000; |
+// The maximum allowed size per serialized proto. |
+const int kMaxSerializedProtoBytes = (1 << 16) - 1; |
bool DoSerializeEvents(const LogMetadata& metadata, |
const FrameEventMap& frame_events, |
const PacketEventMap& packet_events, |
@@ -42,6 +45,7 @@ bool DoSerializeEvents(const LogMetadata& metadata, |
base::BigEndianWriter writer(output, max_output_bytes); |
int proto_size = metadata.ByteSize(); |
+ DCHECK(proto_size <= kMaxSerializedProtoBytes); |
if (!writer.WriteU16(proto_size)) |
return false; |
if (!metadata.SerializeToArray(writer.ptr(), writer.remaining())) |
@@ -63,6 +67,7 @@ bool DoSerializeEvents(const LogMetadata& metadata, |
prev_rtp_timestamp = it->first; |
proto_size = frame_event.ByteSize(); |
+ DCHECK(proto_size <= kMaxSerializedProtoBytes); |
// Write size of the proto, then write the proto. |
if (!writer.WriteU16(proto_size)) |
@@ -84,6 +89,7 @@ bool DoSerializeEvents(const LogMetadata& metadata, |
prev_rtp_timestamp = it->first; |
proto_size = packet_event.ByteSize(); |
+ DCHECK(proto_size <= kMaxSerializedProtoBytes); |
// Write size of the proto, then write the proto. |
if (!writer.WriteU16(proto_size)) |