From: Eric Biggers Date: Fri, 13 Dec 2013 16:29:35 +0000 (-0600) Subject: bitstream_put_bits(): Mask high-order bits X-Git-Tag: v1.6.0~154 X-Git-Url: https://wimlib.net/git/?p=wimlib;a=commitdiff_plain;h=4ecf344e77e1f5891055881950a6e89e32b16008;hp=1558b2a0cc23c40778f42a8d6e8d9bb523b1c593 bitstream_put_bits(): Mask high-order bits --- diff --git a/src/compress.c b/src/compress.c index 14046b19..76043d63 100644 --- a/src/compress.c +++ b/src/compress.c @@ -41,6 +41,7 @@ void bitstream_put_bits(struct output_bitstream *ostream, u32 bits, unsigned num_bits) { + bits &= (1U << num_bits) - 1; while (num_bits > ostream->free_bits) { /* Buffer variable does not have space for the new bits. It * needs to be flushed as a 16-bit integer. Bits in the second diff --git a/src/lzx-compress.c b/src/lzx-compress.c index e34b3204..04e5fbfb 100644 --- a/src/lzx-compress.c +++ b/src/lzx-compress.c @@ -984,9 +984,9 @@ lzx_write_compressed_block(int block_type, bitstream_put_bits(ostream, 0, 1); if (max_window_size >= 65536) - bitstream_put_bits(ostream, (block_size >> 16) & 0xff, 8); + bitstream_put_bits(ostream, block_size >> 16, 8); - bitstream_put_bits(ostream, block_size & 0xffff, 16); + bitstream_put_bits(ostream, block_size, 16); } /* Write out lengths of the main code. Note that the LZX specification