/* get offset */
offset = LZ4_readLE16(ip); ip+=2;
match = op - offset;
+ assert(match <= op);
/* get matchlength */
length = token & ML_MASK;
}
/* 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);
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);
#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)) {
} }
continue;
}
+ assert(match >= lowPrefix);
/* copy match within block */
cpy = op + length;