]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
removed one assert()
authorYann Collet <cyan@fb.com>
Wed, 10 Oct 2018 23:36:11 +0000 (16:36 -0700)
committerYann Collet <cyan@fb.com>
Wed, 10 Oct 2018 23:39:15 +0000 (16:39 -0700)
which can be triggered when input is corrupted.

lib/common/bitstream.h

index 00b22049a48e136c1e39fc6e7e74c56eec1606e7..faa0c21639fd4f6f6e2addc7e00a1187a0a51d9a 100644 (file)
@@ -340,6 +340,7 @@ 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)
 {
     assert(nbBits < BIT_MASK_SIZE);
+    assert(start < sizeof(bitContainer)*8);
     return (bitContainer >> start) & BIT_mask[nbBits];
 }
 
@@ -357,11 +358,13 @@ MEM_STATIC size_t BIT_getLowerBits(size_t bitContainer, U32 const nbBits)
  * @return : value extracted */
 MEM_STATIC size_t BIT_lookBits(const BIT_DStream_t* bitD, U32 nbBits)
 {
+    /* arbitrate between double-shift and shift+mask */
 #if 1
-    assert(bitD->bitsConsumed + nbBits <= sizeof(bitD->bitContainer)*8);
+    /* if bitD->bitsConsumed + nbBits > sizeof(bitD->bitContainer)*8,
+     * bitstream is likely corrupted, and result is undefined */
     return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
 #else
-    /* previous code path, seems slower */
+    /* this code path is slower on my os-x laptop */
     U32 const regMask = sizeof(bitD->bitContainer)*8 - 1;
     return ((bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> 1) >> ((regMask-nbBits) & regMask);
 #endif