dctx->oversizedDuration = 0;
dctx->bmi2 = ZSTD_cpuid_bmi2(ZSTD_cpuid());
dctx->outBufferMode = ZSTD_obm_buffered;
+ dctx->forceIgnoreChecksum = ZSTD_d_validateChecksum;
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
dctx->dictContentEndForFuzzing = NULL;
#endif
}
if (ZSTD_isError(decodedSize)) return decodedSize;
- if (dctx->fParams.checksumFlag)
+ if (dctx->fParams.checksumFlag && !dctx->forceIgnoreChecksum)
XXH64_update(&dctx->xxhState, op, decodedSize);
if (decodedSize != 0)
op += decodedSize;
RETURN_ERROR_IF((U64)(op-ostart) != dctx->fParams.frameContentSize,
corruption_detected, "");
}
- if (dctx->fParams.checksumFlag) { /* Frame content checksum verification */
+ if (dctx->fParams.checksumFlag && !dctx->forceIgnoreChecksum) { /* Frame content checksum verification */
U32 const checkCalc = (U32)XXH64_digest(&dctx->xxhState);
U32 checkRead;
RETURN_ERROR_IF(remainingSrcSize<4, checksum_wrong, "");
size_t ZSTD_DCtx_setForceSkipChecksum(ZSTD_DCtx* dctx, ZSTD_format_e format)
{
- return ZSTD_DCtx_setParameter(dctx, ZSTD_d_forceSkipChecksum, format);
+ return ZSTD_DCtx_setParameter(dctx, ZSTD_d_forceIgnoreChecksum, format);
}
ZSTD_bounds ZSTD_dParam_getBounds(ZSTD_dParameter dParam)
return 0;
case ZSTD_d_forceIgnoreChecksum:
CHECK_DBOUNDS(ZSTD_d_forceIgnoreChecksum, value);
- dctx->forceIgnoreChecksum = (ZSTD_ignoreChecksumMode_e)value;
+ dctx->forceIgnoreChecksum = (ZSTD_forceIgnoreChecksum_e)value;
default:;
}
RETURN_ERROR(parameter_unsupported, "");
typedef enum {
ZSTD_d_validateChecksum = 0,
ZSTD_d_ignoreChecksum = 1
-} ZSTD_ignoreChecksumMode_e;
+} ZSTD_forceIgnoreChecksum_e;
struct ZSTD_DCtx_s
{
XXH64_state_t xxhState;
size_t headerSize;
ZSTD_format_e format;
- ZSTD_ignoreChecksumMode_e forceIgnoreChecksum; /* if enabled, will ignore checksums in compressed frame */
+ ZSTD_forceIgnoreChecksum_e forceIgnoreChecksum; /* if == 1, will ignore checksums in compressed frame */
const BYTE* litPtr;
ZSTD_customMem customMem;
size_t litSize;
{ size_t const sr = ZSTD_DCtx_setParameter(dctx, ZSTD_d_format, (ZSTD_format_e)888);
if (!ZSTD_isError(sr)) goto _output_error;
}
+ { size_t const sr = ZSTD_DCtx_setParameter(dctx, ZSTD_d_forceIgnoreChecksum, (ZSTD_forceIgnoreChecksum_e)888);
+ if (!ZSTD_isError(sr)) goto _output_error;
+ }
DISPLAYLEVEL(3, "OK \n");
ZSTD_freeDCtx(dctx);