bitstream_put_bits(): Mask high-order bits
authorEric Biggers <ebiggers3@gmail.com>
Fri, 13 Dec 2013 16:29:35 +0000 (10:29 -0600)
committerEric Biggers <ebiggers3@gmail.com>
Fri, 13 Dec 2013 16:29:35 +0000 (10:29 -0600)
src/compress.c
src/lzx-compress.c

index 14046b1..76043d6 100644 (file)
@@ -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
index e34b320..04e5fbf 100644 (file)
@@ -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