size_t srcBufferSize;
void* dstBuffer;
size_t dstBufferSize;
- void* dictBuffer;
- size_t dictBufferSize;
ZSTD_DStream* dctx;
FILE* dstFile;
} dRess_t;
if (!ress.srcBuffer || !ress.dstBuffer) EXM_THROW(61, "Allocation error : not enough memory");
/* dictionary */
- ress.dictBufferSize = FIO_loadFile(&(ress.dictBuffer), dictFileName);
+ { void* dictBuffer;
+ size_t const dictBufferSize = FIO_loadFile(&dictBuffer, dictFileName);
+ size_t const initError = ZSTD_initDStream_usingDict(ress.dctx, dictBuffer, dictBufferSize);
+ if (ZSTD_isError(initError)) EXM_THROW(61, "ZSTD_initDStream_usingDict error : %s", ZSTD_getErrorName(initError));
+ free(dictBuffer);
+ }
return ress;
}
if (ZSTD_isError(errorCode)) EXM_THROW(69, "Error : can't free ZSTD_DStream context resource : %s", ZSTD_getErrorName(errorCode));
free(ress.srcBuffer);
free(ress.dstBuffer);
- free(ress.dictBuffer);
}
size_t readSize;
U32 storedSkips = 0;
- ZSTD_initDStream_usingDict(ress.dctx, ress.dictBuffer, ress.dictBufferSize);
+ ZSTD_resetDStream(ress.dctx);
/* Header loading (optional, saves one loop) */
{ size_t const toLoad = 9 - alreadyLoaded; /* assumption : 9 >= alreadyLoaded */
$ZSTD -f --rm dirTestDict/* -D tmpDictC
$ZSTD -d --rm dirTestDict/*.zst -D tmpDictC # note : use internal checksum by default
if [[ "$OSTYPE" == "darwin"* ]]; then
- $ECHO "test skipped on OS-X" # not compatible with OS-X's md5
+ $ECHO "md5sum -c not supported on OS-X : test skipped" # not compatible with OS-X's md5
else
$MD5SUM -c tmph1
fi
/* Byte-by-byte decompression test */
DISPLAYLEVEL(4, "test%3i : decompress byte-by-byte : ", testNb++);
- { size_t r = 1;
+ { /* skippable frame */
+ size_t r = 1;
ZSTD_initDStream_usingDict(zd, CNBuffer, 128 KB);
inBuff.src = compressedBuffer;
outBuff.dst = decodedBuffer;
r = ZSTD_decompressStream(zd, &outBuff, &inBuff);
if (ZSTD_isError(r)) goto _output_error;
}
+ /* normal frame */
ZSTD_initDStream_usingDict(zd, CNBuffer, 128 KB);
r=1;
- while (r) { /* normal frame */
+ while (r) {
inBuff.size = inBuff.pos + 1;
outBuff.size = outBuff.pos + 1;
r = ZSTD_decompressStream(zd, &outBuff, &inBuff);
}
+/* ====== Fuzzer tests ====== */
+
static size_t findDiff(const void* buf1, const void* buf2, size_t max)
{
const BYTE* b1 = (const BYTE*)buf1;
FUZ_rand(&coreSeed);
lseed = coreSeed ^ prime1;
- /* states full reset (unsynchronized) */
- /* some issues only happen when reusing states in a specific sequence of parameters */
+ /* states full reset (deliberately not synchronized) */
+ /* some issues can only happen when reusing states */
if ((FUZ_rand(&lseed) & 0xFF) == 131) { ZSTD_freeCStream(zc); zc = ZSTD_createCStream(); }
if ((FUZ_rand(&lseed) & 0xFF) == 132) { ZSTD_freeDStream(zd); zd = ZSTD_createDStream(); }