Fix support for BitBuffer::ReadNonSymmetric(&value, 1)
Bug: None
Change-Id: I4a9076cbb250a8f5c60a90d509f57d1067a71a14
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/178808
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Magnus Flodman <mflodman@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31671}
diff --git a/rtc_base/bit_buffer.cc b/rtc_base/bit_buffer.cc
index a6dc1c7..540141f 100644
--- a/rtc_base/bit_buffer.cc
+++ b/rtc_base/bit_buffer.cc
@@ -162,6 +162,12 @@
bool BitBuffer::ReadNonSymmetric(uint32_t* val, uint32_t num_values) {
RTC_DCHECK_GT(num_values, 0);
RTC_DCHECK_LE(num_values, uint32_t{1} << 31);
+ if (num_values == 1) {
+ // When there is only one possible value, it requires zero bits to store it.
+ // But ReadBits doesn't support reading zero bits.
+ *val = 0;
+ return true;
+ }
size_t count_bits = CountBits(num_values);
uint32_t num_min_bits_values = (uint32_t{1} << count_bits) - num_values;
@@ -308,6 +314,11 @@
bool BitBufferWriter::WriteNonSymmetric(uint32_t val, uint32_t num_values) {
RTC_DCHECK_LT(val, num_values);
RTC_DCHECK_LE(num_values, uint32_t{1} << 31);
+ if (num_values == 1) {
+ // When there is only one possible value, it requires zero bits to store it.
+ // But WriteBits doesn't support writing zero bits.
+ return true;
+ }
size_t count_bits = CountBits(num_values);
uint32_t num_min_bits_values = (uint32_t{1} << count_bits) - num_values;