added minimum for decoder buffer
also : introduced macro BOUNDED()
This commit is contained in:
@@ -57,6 +57,7 @@ extern "C" {
|
|||||||
#undef MAX
|
#undef MAX
|
||||||
#define MIN(a,b) ((a)<(b) ? (a) : (b))
|
#define MIN(a,b) ((a)<(b) ? (a) : (b))
|
||||||
#define MAX(a,b) ((a)>(b) ? (a) : (b))
|
#define MAX(a,b) ((a)>(b) ? (a) : (b))
|
||||||
|
#define BOUNDED(min,val,max) (MAX(min,MIN(val,max)))
|
||||||
|
|
||||||
|
|
||||||
/*-*************************************
|
/*-*************************************
|
||||||
|
|||||||
@@ -1465,7 +1465,7 @@ static size_t ZSTD_estimateCCtxSize_usingCCtxParams_internal(
|
|||||||
const size_t buffOutSize,
|
const size_t buffOutSize,
|
||||||
const U64 pledgedSrcSize)
|
const U64 pledgedSrcSize)
|
||||||
{
|
{
|
||||||
size_t const windowSize = MAX(1, (size_t)MIN(((U64)1 << cParams->windowLog), pledgedSrcSize));
|
size_t const windowSize = BOUNDED(1, 1 << cParams->windowLog, pledgedSrcSize);
|
||||||
size_t const blockSize = MIN(ZSTD_BLOCKSIZE_MAX, windowSize);
|
size_t const blockSize = MIN(ZSTD_BLOCKSIZE_MAX, windowSize);
|
||||||
U32 const divider = (cParams->minMatch==3) ? 3 : 4;
|
U32 const divider = (cParams->minMatch==3) ? 3 : 4;
|
||||||
size_t const maxNbSeq = blockSize / divider;
|
size_t const maxNbSeq = blockSize / divider;
|
||||||
@@ -1783,7 +1783,7 @@ ZSTD_reset_matchState(ZSTD_matchState_t* ms,
|
|||||||
if (ms->tagTable) ZSTD_memset(ms->tagTable, 0, tagTableSize);
|
if (ms->tagTable) ZSTD_memset(ms->tagTable, 0, tagTableSize);
|
||||||
}
|
}
|
||||||
{ /* Switch to 32-entry rows if searchLog is 5 (or more) */
|
{ /* Switch to 32-entry rows if searchLog is 5 (or more) */
|
||||||
U32 const rowLog = MAX(MIN(cParams->searchLog, 6), 4);
|
U32 const rowLog = BOUNDED(4, cParams->searchLog, 6);
|
||||||
assert(cParams->hashLog >= rowLog);
|
assert(cParams->hashLog >= rowLog);
|
||||||
ms->rowHashLog = cParams->hashLog - rowLog;
|
ms->rowHashLog = cParams->hashLog - rowLog;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1086,7 +1086,7 @@ FORCE_INLINE_TEMPLATE void ZSTD_row_update_internal(ZSTD_matchState_t* ms, const
|
|||||||
* processing.
|
* processing.
|
||||||
*/
|
*/
|
||||||
void ZSTD_row_update(ZSTD_matchState_t* const ms, const BYTE* ip) {
|
void ZSTD_row_update(ZSTD_matchState_t* const ms, const BYTE* ip) {
|
||||||
const U32 rowLog = MAX(MIN(ms->cParams.searchLog, 6), 4);
|
const U32 rowLog = BOUNDED(4, ms->cParams.searchLog, 6);
|
||||||
const U32 rowMask = (1u << rowLog) - 1;
|
const U32 rowMask = (1u << rowLog) - 1;
|
||||||
const U32 mls = MIN(ms->cParams.minMatch, 6 /* mls caps out at 6 */);
|
const U32 mls = MIN(ms->cParams.minMatch, 6 /* mls caps out at 6 */);
|
||||||
|
|
||||||
|
|||||||
@@ -1123,7 +1123,7 @@ static size_t ZSTD_nextSrcSizeToDecompressWithInputSize(ZSTD_DCtx* dctx, size_t
|
|||||||
return dctx->expected;
|
return dctx->expected;
|
||||||
if (dctx->bType != bt_raw)
|
if (dctx->bType != bt_raw)
|
||||||
return dctx->expected;
|
return dctx->expected;
|
||||||
return MIN(MAX(inputSize, 1), dctx->expected);
|
return BOUNDED(1, inputSize, dctx->expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx) {
|
ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx) {
|
||||||
|
|||||||
@@ -110,10 +110,11 @@ typedef struct {
|
|||||||
# define ZSTD_DECODER_INTERNAL_BUFFER (1 << 16)
|
# define ZSTD_DECODER_INTERNAL_BUFFER (1 << 16)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define ZSTD_LBMIN 64
|
||||||
#define ZSTD_LBMAX (128 << 10)
|
#define ZSTD_LBMAX (128 << 10)
|
||||||
|
|
||||||
/* extra buffer, compensates amount of dst required to store litBuffer */
|
/* extra buffer, compensates when dst is not large enough to store litBuffer */
|
||||||
#define ZSTD_LITBUFFEREXTRASIZE MIN(ZSTD_DECODER_INTERNAL_BUFFER, ZSTD_LBMAX)
|
#define ZSTD_LITBUFFEREXTRASIZE BOUNDED(ZSTD_LBMIN, ZSTD_DECODER_INTERNAL_BUFFER, ZSTD_LBMAX)
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ZSTD_not_in_dst = 0, /* Stored entirely within litExtraBuffer */
|
ZSTD_not_in_dst = 0, /* Stored entirely within litExtraBuffer */
|
||||||
|
|||||||
Reference in New Issue
Block a user