From: qiuyangs Date: Sun, 6 Jan 2019 08:29:30 +0000 (+0800) Subject: lz4hc.c: change (length >> 8) to (length / 255) X-Git-Tag: upstream/1.9.3~5^2~37^2^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=660d21272e4c8a0f49db5fc1e6853f08713dff82;p=platform%2Fupstream%2Flz4.git lz4hc.c: change (length >> 8) to (length / 255) Every 0xff byte in the compressed block corresponds to a length of 255 (not 256) in the input data. For long repeating sequences, using (length >> 8) may generate bad compressed blocks. --- diff --git a/lib/lz4hc.c b/lib/lz4hc.c index 56c8f47..86db155 100644 --- a/lib/lz4hc.c +++ b/lib/lz4hc.c @@ -437,7 +437,7 @@ LZ4_FORCE_INLINE int LZ4HC_encodeSequence ( /* Encode Literal length */ length = (size_t)(*ip - *anchor); - if ((limit) && ((*op + (length >> 8) + length + (2 + 1 + LASTLITERALS)) > oend)) return 1; /* Check output limit */ + if ((limit) && ((*op + (length / 255) + length + (2 + 1 + LASTLITERALS)) > oend)) return 1; /* Check output limit */ if (length >= RUN_MASK) { size_t len = length - RUN_MASK; *token = (RUN_MASK << ML_BITS); @@ -458,7 +458,7 @@ LZ4_FORCE_INLINE int LZ4HC_encodeSequence ( /* Encode MatchLength */ assert(matchLength >= MINMATCH); length = (size_t)(matchLength - MINMATCH); - if ((limit) && (*op + (length >> 8) + (1 + LASTLITERALS) > oend)) return 1; /* Check output limit */ + if ((limit) && (*op + (length / 255) + (1 + LASTLITERALS) > oend)) return 1; /* Check output limit */ if (length >= ML_MASK) { *token += ML_MASK; length -= ML_MASK;