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;