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();
|
const bool all_blobs_present = num_blobs_present == blobs.size();
|
||||||
if (!all_blobs_present) {
|
if (!all_blobs_present) {
|
||||||
reserve_size_bits += blobs.size();
|
reserve_size_bits += blobs.size();
|
||||||
@ -74,11 +78,11 @@ std::string EncodeOptionalBlobs(
|
|||||||
std::vector<absl::optional<std::string>> DecodeOptionalBlobs(
|
std::vector<absl::optional<std::string>> DecodeOptionalBlobs(
|
||||||
absl::string_view encoded_blobs,
|
absl::string_view encoded_blobs,
|
||||||
size_t num_of_blobs) {
|
size_t num_of_blobs) {
|
||||||
|
std::vector<absl::optional<std::string>> res(num_of_blobs);
|
||||||
if (encoded_blobs.empty() || num_of_blobs == 0) {
|
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);
|
BitstreamReader reader(encoded_blobs);
|
||||||
const bool all_blobs_present = reader.ReadBit();
|
const bool all_blobs_present = reader.ReadBit();
|
||||||
|
|
||||||
|
|||||||
@ -86,7 +86,19 @@ TEST(OptionalBlobEncoding, SomeBlobsPresent) {
|
|||||||
TEST(OptionalBlobEncoding, NoBlobsPresent) {
|
TEST(OptionalBlobEncoding, NoBlobsPresent) {
|
||||||
std::string encoded =
|
std::string encoded =
|
||||||
EncodeOptionalBlobs({absl::nullopt, absl::nullopt, absl::nullopt});
|
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);
|
EXPECT_EQ(encoded, expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,13 +150,24 @@ TEST(OptionalBlobDecoding, SomeBlobsPresent) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(OptionalBlobDecoding, NoBlobsPresent) {
|
TEST(OptionalBlobDecoding, NoBlobsPresent) {
|
||||||
std::string encoded =
|
auto decoded = DecodeOptionalBlobs("", 3);
|
||||||
BitBuilder().Bit(0).Bit(0).Bit(0).Bit(0).ByteAlign().AsString();
|
|
||||||
auto decoded = DecodeOptionalBlobs(encoded, 3);
|
|
||||||
EXPECT_THAT(decoded,
|
EXPECT_THAT(decoded,
|
||||||
ElementsAre(absl::nullopt, absl::nullopt, absl::nullopt));
|
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) {
|
TEST(OptionalBlobDecoding, ZeroBlobs) {
|
||||||
std::string encoded;
|
std::string encoded;
|
||||||
auto decoded = DecodeOptionalBlobs(encoded, 0);
|
auto decoded = DecodeOptionalBlobs(encoded, 0);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user