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) {