From bc4c8aa4b7bae9b31b854b2aa88aff8b927a9cbc Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Mon, 25 Jan 2016 17:26:01 +0100 Subject: [PATCH] fixed new MIN_CBLOCK_SIZE --- lib/zstd_decompress.c | 4 ++-- lib/zstd_internal.h | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/zstd_decompress.c b/lib/zstd_decompress.c index 096d90ff..a0f4d2d8 100644 --- a/lib/zstd_decompress.c +++ b/lib/zstd_decompress.c @@ -351,14 +351,14 @@ size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx, 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 a5d20409..3c3d78ce 100644 --- a/lib/zstd_internal.h +++ b/lib/zstd_internal.h @@ -94,7 +94,9 @@ static const size_t ZSTD_frameHeaderSize_min = 5; #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 @@ static void ZSTD_copy8(void* dst, const void* src) { memcpy(dst, src, 8); } #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;