]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
restored bitMask for shift values 1365/head
authorYann Collet <cyan@fb.com>
Thu, 11 Oct 2018 01:26:44 +0000 (18:26 -0700)
committerYann Collet <cyan@fb.com>
Thu, 11 Oct 2018 01:29:50 +0000 (18:29 -0700)
since corrupted bitstreams can generate too large values.

This slightly reduces the benefits from clang on my laptop.
gcc results and code generation are not affected.

lib/common/bitstream.h

index f8ec7efc9a96b5876169c6210e3873ed81aee3f0..ef89b9878e2208ef11083e31632875a923dca1de 100644 (file)
@@ -339,9 +339,10 @@ MEM_STATIC size_t BIT_getUpperBits(size_t bitContainer, U32 const start)
 
 MEM_STATIC size_t BIT_getMiddleBits(size_t bitContainer, U32 const start, U32 const nbBits)
 {
+    U32 const regMask = sizeof(bitContainer)*8 - 1;
+    /* if start > regMask, bitstream is corrupted, and result is undefined */
     assert(nbBits < BIT_MASK_SIZE);
-    /* if start > bitMask, bitstream is corrupted, and result is undefined */
-    return (bitContainer >> start) & BIT_mask[nbBits];
+    return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
 }
 
 MEM_STATIC size_t BIT_getLowerBits(size_t bitContainer, U32 const nbBits)