fuzzer: make negative compression level fail
result of ZSTD_compress_advanced() is different from ZSTD_compress_generic() when using negative compression levels because the disabling of huffman compression is not passed in parameters.dev
parent
3158deef43
commit
8537bfd85c
|
@ -2916,22 +2916,22 @@ size_t ZSTD_compressEnd (ZSTD_CCtx* cctx,
|
||||||
|
|
||||||
|
|
||||||
static size_t ZSTD_compress_internal (ZSTD_CCtx* cctx,
|
static size_t ZSTD_compress_internal (ZSTD_CCtx* cctx,
|
||||||
void* dst, size_t dstCapacity,
|
void* dst, size_t dstCapacity,
|
||||||
const void* src, size_t srcSize,
|
const void* src, size_t srcSize,
|
||||||
const void* dict,size_t dictSize,
|
const void* dict,size_t dictSize,
|
||||||
ZSTD_parameters params)
|
ZSTD_parameters params)
|
||||||
{
|
{
|
||||||
ZSTD_CCtx_params const cctxParams =
|
ZSTD_CCtx_params const cctxParams =
|
||||||
ZSTD_assignParamsToCCtxParams(cctx->requestedParams, params);
|
ZSTD_assignParamsToCCtxParams(cctx->requestedParams, params);
|
||||||
DEBUGLOG(4, "ZSTD_compress_internal");
|
DEBUGLOG(4, "ZSTD_compress_internal");
|
||||||
return ZSTD_compress_advanced_internal(cctx,
|
return ZSTD_compress_advanced_internal(cctx,
|
||||||
dst, dstCapacity,
|
dst, dstCapacity,
|
||||||
src, srcSize,
|
src, srcSize,
|
||||||
dict, dictSize,
|
dict, dictSize,
|
||||||
cctxParams);
|
cctxParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ZSTD_compress_advanced (ZSTD_CCtx* ctx,
|
size_t ZSTD_compress_advanced (ZSTD_CCtx* cctx,
|
||||||
void* dst, size_t dstCapacity,
|
void* dst, size_t dstCapacity,
|
||||||
const void* src, size_t srcSize,
|
const void* src, size_t srcSize,
|
||||||
const void* dict,size_t dictSize,
|
const void* dict,size_t dictSize,
|
||||||
|
@ -2939,7 +2939,11 @@ size_t ZSTD_compress_advanced (ZSTD_CCtx* ctx,
|
||||||
{
|
{
|
||||||
DEBUGLOG(4, "ZSTD_compress_advanced");
|
DEBUGLOG(4, "ZSTD_compress_advanced");
|
||||||
CHECK_F(ZSTD_checkCParams(params.cParams));
|
CHECK_F(ZSTD_checkCParams(params.cParams));
|
||||||
return ZSTD_compress_internal(ctx, dst, dstCapacity, src, srcSize, dict, dictSize, params);
|
return ZSTD_compress_internal(cctx,
|
||||||
|
dst, dstCapacity,
|
||||||
|
src, srcSize,
|
||||||
|
dict, dictSize,
|
||||||
|
params);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Internal */
|
/* Internal */
|
||||||
|
@ -2950,15 +2954,18 @@ size_t ZSTD_compress_advanced_internal(
|
||||||
const void* dict,size_t dictSize,
|
const void* dict,size_t dictSize,
|
||||||
ZSTD_CCtx_params params)
|
ZSTD_CCtx_params params)
|
||||||
{
|
{
|
||||||
DEBUGLOG(4, "ZSTD_compress_advanced_internal (srcSize:%u)",
|
DEBUGLOG(4, "ZSTD_compress_advanced_internal (srcSize:%u)", (U32)srcSize);
|
||||||
(U32)srcSize);
|
CHECK_F( ZSTD_compressBegin_internal(cctx,
|
||||||
CHECK_F( ZSTD_compressBegin_internal(cctx, dict, dictSize, ZSTD_dct_auto, ZSTD_dtlm_fast, NULL,
|
dict, dictSize, ZSTD_dct_auto, ZSTD_dtlm_fast, NULL,
|
||||||
params, srcSize, ZSTDb_not_buffered) );
|
params, srcSize, ZSTDb_not_buffered) );
|
||||||
return ZSTD_compressEnd(cctx, dst, dstCapacity, src, srcSize);
|
return ZSTD_compressEnd(cctx, dst, dstCapacity, src, srcSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ZSTD_compress_usingDict(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize,
|
size_t ZSTD_compress_usingDict(ZSTD_CCtx* cctx,
|
||||||
const void* dict, size_t dictSize, int compressionLevel)
|
void* dst, size_t dstCapacity,
|
||||||
|
const void* src, size_t srcSize,
|
||||||
|
const void* dict, size_t dictSize,
|
||||||
|
int compressionLevel)
|
||||||
{
|
{
|
||||||
ZSTD_parameters const params = ZSTD_getParams(compressionLevel, srcSize ? srcSize : 1, dict ? dictSize : 0);
|
ZSTD_parameters const params = ZSTD_getParams(compressionLevel, srcSize ? srcSize : 1, dict ? dictSize : 0);
|
||||||
ZSTD_CCtx_params cctxParams = ZSTD_assignParamsToCCtxParams(cctx->requestedParams, params);
|
ZSTD_CCtx_params cctxParams = ZSTD_assignParamsToCCtxParams(cctx->requestedParams, params);
|
||||||
|
@ -2967,13 +2974,19 @@ size_t ZSTD_compress_usingDict(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, c
|
||||||
return ZSTD_compress_advanced_internal(cctx, dst, dstCapacity, src, srcSize, dict, dictSize, cctxParams);
|
return ZSTD_compress_advanced_internal(cctx, dst, dstCapacity, src, srcSize, dict, dictSize, cctxParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ZSTD_compressCCtx (ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize, int compressionLevel)
|
size_t ZSTD_compressCCtx(ZSTD_CCtx* cctx,
|
||||||
|
void* dst, size_t dstCapacity,
|
||||||
|
const void* src, size_t srcSize,
|
||||||
|
int compressionLevel)
|
||||||
{
|
{
|
||||||
DEBUGLOG(4, "ZSTD_compressCCtx (srcSize=%u)", (U32)srcSize);
|
DEBUGLOG(4, "ZSTD_compressCCtx (srcSize=%u)", (U32)srcSize);
|
||||||
|
assert(cctx != NULL);
|
||||||
return ZSTD_compress_usingDict(cctx, dst, dstCapacity, src, srcSize, NULL, 0, compressionLevel);
|
return ZSTD_compress_usingDict(cctx, dst, dstCapacity, src, srcSize, NULL, 0, compressionLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ZSTD_compress(void* dst, size_t dstCapacity, const void* src, size_t srcSize, int compressionLevel)
|
size_t ZSTD_compress(void* dst, size_t dstCapacity,
|
||||||
|
const void* src, size_t srcSize,
|
||||||
|
int compressionLevel)
|
||||||
{
|
{
|
||||||
size_t result;
|
size_t result;
|
||||||
ZSTD_CCtx ctxBody;
|
ZSTD_CCtx ctxBody;
|
||||||
|
|
|
@ -1082,14 +1082,19 @@ static int basicUnitTests(U32 seed, double compressibility)
|
||||||
|
|
||||||
/* negative compression level test : ensure simple API and advanced API produce same result */
|
/* negative compression level test : ensure simple API and advanced API produce same result */
|
||||||
DISPLAYLEVEL(3, "test%3i : negative compression level : ", testNb++);
|
DISPLAYLEVEL(3, "test%3i : negative compression level : ", testNb++);
|
||||||
{ size_t const srcSize = CNBuffSize / 5;
|
{ ZSTD_CCtx* const cctx = ZSTD_createCCtx();
|
||||||
int const compressionLevel = -2;
|
size_t const srcSize = CNBuffSize / 5;
|
||||||
size_t const cSize_1pass = ZSTD_compress(compressedBuffer, compressedBufferSize,
|
int const compressionLevel = -1;
|
||||||
CNBuffer, srcSize,
|
|
||||||
compressionLevel);
|
assert(cctx != NULL);
|
||||||
if (ZSTD_isError(cSize_1pass)) goto _output_error;
|
{ ZSTD_parameters const params = ZSTD_getParams(compressionLevel, srcSize, 0);
|
||||||
{ ZSTD_CCtx* const cctx = ZSTD_createCCtx();
|
size_t const cSize_1pass = ZSTD_compress_advanced(cctx,
|
||||||
assert(cctx != NULL);
|
compressedBuffer, compressedBufferSize,
|
||||||
|
CNBuffer, srcSize,
|
||||||
|
NULL, 0,
|
||||||
|
params);
|
||||||
|
if (ZSTD_isError(cSize_1pass)) goto _output_error;
|
||||||
|
|
||||||
CHECK( ZSTD_CCtx_setParameter(cctx, ZSTD_p_compressionLevel, compressionLevel) );
|
CHECK( ZSTD_CCtx_setParameter(cctx, ZSTD_p_compressionLevel, compressionLevel) );
|
||||||
{ ZSTD_inBuffer in = { CNBuffer, srcSize, 0 };
|
{ ZSTD_inBuffer in = { CNBuffer, srcSize, 0 };
|
||||||
ZSTD_outBuffer out = { compressedBuffer, compressedBufferSize, 0 };
|
ZSTD_outBuffer out = { compressedBuffer, compressedBufferSize, 0 };
|
||||||
|
@ -1097,9 +1102,8 @@ static int basicUnitTests(U32 seed, double compressibility)
|
||||||
DISPLAYLEVEL(5, "simple=%zu vs %zu=advanced : ", cSize_1pass, out.pos);
|
DISPLAYLEVEL(5, "simple=%zu vs %zu=advanced : ", cSize_1pass, out.pos);
|
||||||
if (ZSTD_isError(compressionResult)) goto _output_error;
|
if (ZSTD_isError(compressionResult)) goto _output_error;
|
||||||
if (out.pos != cSize_1pass) goto _output_error;
|
if (out.pos != cSize_1pass) goto _output_error;
|
||||||
}
|
} }
|
||||||
ZSTD_freeCCtx(cctx);
|
ZSTD_freeCCtx(cctx);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
DISPLAYLEVEL(3, "OK \n");
|
DISPLAYLEVEL(3, "OK \n");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue