diff --git a/lib/decompress/read_bitstream.h b/lib/decompress/read_bitstream.h index 920540eac8925364f8000b3af2d2f1123152594b..c65090eac4074d12fcd087fa43d193c3c4ade4fa 100644 --- a/lib/decompress/read_bitstream.h +++ b/lib/decompress/read_bitstream.h @@ -45,6 +45,7 @@ #include <string.h> #include "../common/byteorder.h" +#include "../common/compiler.h" @@ -123,14 +124,18 @@ static __inline uint64_t bit_read_unaligned_64be(const void *ptr) static __inline size_t bit_init_decoder(struct bit_decoder *dec, const void *buf, size_t buf_size) { + assert(dec != NULL); + assert(buf != NULL); + + dec->cursor = (const uint8_t *)buf; + if (buf_size < 1) { - memset(dec, 0, sizeof(*dec)); dec->bits_consumed = sizeof(dec->bit_container)*8; + dec->bit_container = 0; + dec->limit_ptr = (const uint8_t *)buf; return 0; } - dec->cursor = (const uint8_t *)buf; - if (buf_size >= sizeof(dec->bit_container)) { /* normal case */ dec->bits_consumed = 0; dec->bit_container = bit_read_unaligned_64be(dec->cursor); @@ -320,7 +325,7 @@ static __inline int bit_refill(struct bit_decoder *dec) { unsigned int const bytes_consumed = dec->bits_consumed >> 3; - if (dec->bits_consumed > sizeof(dec->bit_container)*8) + if (unlikely(dec->bits_consumed > sizeof(dec->bit_container)*8)) return BIT_OVERFLOW; if (dec->cursor + bytes_consumed < dec->limit_ptr) {