| Index: components/packed_ct_ev_whitelist/bit_stream_reader.cc
|
| diff --git a/components/packed_ct_ev_whitelist/bit_stream_reader.cc b/components/packed_ct_ev_whitelist/bit_stream_reader.cc
|
| index e4f6cc7b64a8896055bc56dd85f272d891b7f745..94ef00904bbd9ae79758a6f24552022be90184bb 100644
|
| --- a/components/packed_ct_ev_whitelist/bit_stream_reader.cc
|
| +++ b/components/packed_ct_ev_whitelist/bit_stream_reader.cc
|
| @@ -34,8 +34,13 @@ bool BitStreamReader::ReadBits(uint8_t num_bits, uint64_t* out) {
|
| return false;
|
|
|
| *out = 0;
|
| - for (uint8_t i = 0; i < num_bits; ++i)
|
| - (*out) |= (static_cast<uint64_t>(ReadBit()) << (num_bits - (i + 1)));
|
| +
|
| + for (; num_bits && (current_bit_ != 7); --num_bits)
|
| + (*out) |= (static_cast<uint64_t>(ReadBit()) << (num_bits - 1));
|
| + for (; num_bits / 8; num_bits -= 8)
|
| + (*out) |= (static_cast<uint64_t>(ReadByte()) << (num_bits - 8));
|
| + for (; num_bits; --num_bits)
|
| + (*out) |= (static_cast<uint64_t>(ReadBit()) << (num_bits - 1));
|
|
|
| return true;
|
| }
|
| @@ -61,5 +66,13 @@ uint8_t BitStreamReader::ReadBit() {
|
| return res;
|
| }
|
|
|
| +uint8_t BitStreamReader::ReadByte() {
|
| + DCHECK_GT(BitsLeft(), 7u);
|
| + DCHECK_EQ(current_bit_, 7);
|
| +
|
| + return source_.data()[current_byte_++];
|
| +
|
| +}
|
| +
|
| } // namespace internal
|
| } // namespace packed_ct_ev_whitelist
|
|
|