diff --git a/logging/rtc_event_log/encoder/optional_blob_encoding.cc b/logging/rtc_event_log/encoder/optional_blob_encoding.cc index 358d4e6ed8..81d2c0625b 100644 --- a/logging/rtc_event_log/encoder/optional_blob_encoding.cc +++ b/logging/rtc_event_log/encoder/optional_blob_encoding.cc @@ -35,6 +35,10 @@ std::string EncodeOptionalBlobs( } } + if (num_blobs_present == 0) { + return {}; + } + const bool all_blobs_present = num_blobs_present == blobs.size(); if (!all_blobs_present) { reserve_size_bits += blobs.size(); @@ -74,11 +78,11 @@ std::string EncodeOptionalBlobs( std::vector> DecodeOptionalBlobs( absl::string_view encoded_blobs, size_t num_of_blobs) { + std::vector> res(num_of_blobs); if (encoded_blobs.empty() || num_of_blobs == 0) { - return {}; + return res; } - std::vector> res(num_of_blobs); BitstreamReader reader(encoded_blobs); const bool all_blobs_present = reader.ReadBit(); diff --git a/logging/rtc_event_log/encoder/optional_blob_encoding_unittest.cc b/logging/rtc_event_log/encoder/optional_blob_encoding_unittest.cc index b4d87d7d0f..bdb876f707 100644 --- a/logging/rtc_event_log/encoder/optional_blob_encoding_unittest.cc +++ b/logging/rtc_event_log/encoder/optional_blob_encoding_unittest.cc @@ -86,7 +86,19 @@ TEST(OptionalBlobEncoding, SomeBlobsPresent) { TEST(OptionalBlobEncoding, NoBlobsPresent) { std::string encoded = EncodeOptionalBlobs({absl::nullopt, absl::nullopt, absl::nullopt}); - std::string expected = BitBuilder().Bit(0).Bit(0).Bit(0).Bit(0).AsString(); + EXPECT_THAT(encoded, IsEmpty()); +} + +TEST(OptionalBlobEncoding, EmptyBlobsPresent) { + std::string encoded = EncodeOptionalBlobs({absl::nullopt, "", absl::nullopt}); + std::string expected = BitBuilder() + .Bit(0) + .Bit(0) + .Bit(1) + .Bit(0) + .ByteAlign() + .Bytes({0x0}) + .AsString(); EXPECT_EQ(encoded, expected); } @@ -138,13 +150,24 @@ TEST(OptionalBlobDecoding, SomeBlobsPresent) { } TEST(OptionalBlobDecoding, NoBlobsPresent) { - std::string encoded = - BitBuilder().Bit(0).Bit(0).Bit(0).Bit(0).ByteAlign().AsString(); - auto decoded = DecodeOptionalBlobs(encoded, 3); + auto decoded = DecodeOptionalBlobs("", 3); EXPECT_THAT(decoded, ElementsAre(absl::nullopt, absl::nullopt, absl::nullopt)); } +TEST(OptionalBlobDecoding, EmptyBlobsPresent) { + std::string encoded = BitBuilder() + .Bit(0) + .Bit(0) + .Bit(1) + .Bit(0) + .ByteAlign() + .Bytes({0x0}) + .AsString(); + auto decoded = DecodeOptionalBlobs(encoded, 3); + EXPECT_THAT(decoded, ElementsAre(absl::nullopt, "", absl::nullopt)); +} + TEST(OptionalBlobDecoding, ZeroBlobs) { std::string encoded; auto decoded = DecodeOptionalBlobs(encoded, 0);