diff options
author | Yann Collet <cyan@fb.com> | 2019-06-29 04:03:07 (GMT) |
---|---|---|
committer | Yann Collet <cyan@fb.com> | 2019-06-29 04:03:07 (GMT) |
commit | 1ccca52f5394c686cf55db3b0a2ab01db0063787 (patch) | |
tree | 392c12d0d42be00c29038abde623553c71e1e5c3 | |
parent | 3b917ef6e6e9b18b15f18b6d691c4ea5033cfe41 (diff) | |
parent | 8b97fcda6061a88646cfd5eeb0a8797f2d3b6845 (diff) | |
download | lz4-1ccca52f5394c686cf55db3b0a2ab01db0063787.zip lz4-1ccca52f5394c686cf55db3b0a2ab01db0063787.tar.gz lz4-1ccca52f5394c686cf55db3b0a2ab01db0063787.tar.bz2 |
Merge branch 'dev' into fuzzasan_fixed
-rw-r--r-- | lib/lz4.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -1703,6 +1703,7 @@ LZ4_decompress_generic( /* get offset */ offset = LZ4_readLE16(ip); ip+=2; match = op - offset; + assert(match <= op); /* get matchlength */ length = token & ML_MASK; @@ -1724,8 +1725,12 @@ LZ4_decompress_generic( } /* Fastpath check: Avoids a branch in LZ4_wildCopy32 if true */ - if (!(dict == usingExtDict) || (match >= lowPrefix)) { + if ((dict == withPrefix64k) || (match >= lowPrefix)) { if (offset >= 8) { + assert(match >= lowPrefix); + assert(match <= op); + assert(op + 18 <= oend); + memcpy(op, match, 8); memcpy(op+8, match+8, 8); memcpy(op+16, match+16, 2); @@ -1873,7 +1878,6 @@ LZ4_decompress_generic( length = token & ML_MASK; _copy_match: - if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) goto _output_error; /* Error : offset outside buffers */ if (!partialDecoding) { assert(oend > op); assert(oend - op >= 4); @@ -1891,6 +1895,7 @@ LZ4_decompress_generic( #if LZ4_FAST_DEC_LOOP safe_match_copy: #endif + if ((checkOffset) && (unlikely(match + dictSize < lowPrefix))) goto _output_error; /* Error : offset outside buffers */ /* match starting within external dictionary */ if ((dict==usingExtDict) && (match < lowPrefix)) { if (unlikely(op+length > oend-LASTLITERALS)) { @@ -1918,6 +1923,7 @@ LZ4_decompress_generic( } } continue; } + assert(match >= lowPrefix); /* copy match within block */ cpy = op + length; |