From 6ed3b526e4937900b2c8fc85800137784ae963a9 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Wed, 10 Oct 2018 18:26:44 -0700 Subject: [PATCH] restored bitMask for shift values 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 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/common/bitstream.h b/lib/common/bitstream.h index f8ec7efc9..ef89b9878 100644 --- a/lib/common/bitstream.h +++ b/lib/common/bitstream.h @@ -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) -- 2.47.2