clarify constant MFLIMIT
authorYann Collet <cyan@fb.com>
Tue, 11 Sep 2018 00:36:40 +0000 (17:36 -0700)
committerYann Collet <cyan@fb.com>
Tue, 11 Sep 2018 17:00:13 +0000 (10:00 -0700)
and separate it from MATCH_SAFEGUARD_DISTANCE.

While both constants have same value,
they do not seve same purpose, hence should not be confused.

lib/lz4.c

index 133501d..4046102 100644 (file)
--- a/lib/lz4.c
+++ b/lib/lz4.c
@@ -297,8 +297,9 @@ void LZ4_wildCopy(void* dstPtr, const void* srcPtr, void* dstEnd)
 #define MINMATCH 4
 
 #define WILDCOPYLENGTH 8
-#define LASTLITERALS 5
-#define MFLIMIT (WILDCOPYLENGTH+MINMATCH)
+#define LASTLITERALS   5   /* see ../doc/lz4_Block_format.md#parsing-restrictions */
+#define MFLIMIT       12   /* see ../doc/lz4_Block_format.md#parsing-restrictions */
+#define MATCH_SAFEGUARD_DISTANCE  ((2*WILDCOPYLENGTH) - MINMATCH)   /* ensure it's possible to write 2 x wildcopyLength without overflowing output buffer */
 static const int LZ4_minLength = (MFLIMIT+1);
 
 #define KB *(1 <<10)
@@ -1588,7 +1589,7 @@ _copy_match:
 
         /* partialDecoding : may not respect endBlock parsing restrictions */
         assert(op<=oend);
-        if (partialDecoding && (cpy > oend-12)) {
+        if (partialDecoding && (cpy > oend-MATCH_SAFEGUARD_DISTANCE)) {
             size_t const mlen = MIN(length, (size_t)(oend-op));
             const BYTE* const matchEnd = match + mlen;
             BYTE* const copyEnd = op + mlen;
@@ -1616,7 +1617,7 @@ _copy_match:
         }
         op += 8;
 
-        if (unlikely(cpy > oend-12)) {
+        if (unlikely(cpy > oend-MATCH_SAFEGUARD_DISTANCE)) {
             BYTE* const oCopyLimit = oend - (WILDCOPYLENGTH-1);
             if (cpy > oend-LASTLITERALS) goto _output_error;    /* Error : last LASTLITERALS bytes must be literals (uncompressed) */
             if (op < oCopyLimit) {