fixed new MIN_CBLOCK_SIZE
diff --git a/lib/zstd_decompress.c b/lib/zstd_decompress.c
index 096d90f..a0f4d2d 100644
--- a/lib/zstd_decompress.c
+++ b/lib/zstd_decompress.c
@@ -351,14 +351,14 @@
break;
}
- if (litSize > srcSize-11) /* risk of reading beyond src buffer with wildcopy */
+ if (litSize+WILDCOPY_OVERLENGTH > srcSize) /* risk reading beyond src buffer with wildcopy */
{
if (litSize > srcSize-lhSize) return ERROR(corruption_detected);
memcpy(dctx->litBuffer, istart+lhSize, litSize);
dctx->litPtr = dctx->litBuffer;
dctx->litBufSize = BLOCKSIZE+8;
dctx->litSize = litSize;
- return litSize+lhSize;
+ return lhSize+litSize;
}
/* direct reference into compressed stream */
dctx->litPtr = istart+lhSize;
diff --git a/lib/zstd_internal.h b/lib/zstd_internal.h
index a5d2040..3c3d78c 100644
--- a/lib/zstd_internal.h
+++ b/lib/zstd_internal.h
@@ -94,7 +94,9 @@
#define MaxSeq MAX(MaxLL, MaxML)
#define MIN_SEQUENCES_SIZE (2 /*seqNb*/ + 2 /*dumps*/ + 3 /*seqTables*/ + 1 /*bitStream*/)
-#define MIN_CBLOCK_SIZE (3 /*litCSize*/ + MIN_SEQUENCES_SIZE)
+#define MIN_CBLOCK_SIZE (1 /*litCSize*/ + MIN_SEQUENCES_SIZE)
+
+#define WILDCOPY_OVERLENGTH 8
typedef enum { bt_compressed, bt_raw, bt_rle, bt_end } blockType_t;
@@ -106,7 +108,7 @@
#define COPY8(d,s) { ZSTD_copy8(d,s); d+=8; s+=8; }
-/*! ZSTD_wildcopy : custom version of memcpy(), can copy up to 7-8 bytes too many */
+/*! ZSTD_wildcopy : custom version of memcpy(), can copy up to 7 bytes too many (8 bytes if length==0) */
MEM_STATIC void ZSTD_wildcopy(void* dst, const void* src, size_t length)
{
const BYTE* ip = (const BYTE*)src;