OptionalBlobEncoder encode empty string on no input.
Bug: webrtc:14801 Change-Id: I934849322294ae10f0d7cd405e73bc48892543c9 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/296661 Reviewed-by: Björn Terelius <terelius@webrtc.org> Commit-Queue: Philip Eliasson <philipel@webrtc.org> Cr-Commit-Position: refs/heads/main@{#39502}
This commit is contained in:
parent
f4dfa1ce01
commit
f3e90cd03a
@ -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<absl::optional<std::string>> DecodeOptionalBlobs(
|
||||
absl::string_view encoded_blobs,
|
||||
size_t num_of_blobs) {
|
||||
std::vector<absl::optional<std::string>> res(num_of_blobs);
|
||||
if (encoded_blobs.empty() || num_of_blobs == 0) {
|
||||
return {};
|
||||
return res;
|
||||
}
|
||||
|
||||
std::vector<absl::optional<std::string>> res(num_of_blobs);
|
||||
BitstreamReader reader(encoded_blobs);
|
||||
const bool all_blobs_present = reader.ReadBit();
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user