Add sequence nb validation to compressSequences(), adjust minMatch comparisons
This commit is contained in:
@@ -4680,13 +4680,13 @@ static size_t ZSTD_copySequencesToSeqStoreNoBlockDelim(ZSTD_CCtx* cctx, ZSTD_seq
|
||||
U32 firstHalfMatchLength;
|
||||
litLength = startPosInSequence >= litLength ? 0 : litLength - startPosInSequence;
|
||||
firstHalfMatchLength = endPosInSequence - startPosInSequence - litLength;
|
||||
if (matchLength > blockSize && firstHalfMatchLength >= MINMATCH) {
|
||||
if (matchLength > blockSize && firstHalfMatchLength >= cctx->appliedParams.cParams.minMatch) {
|
||||
/* Only ever split the match if it is larger than the block size */
|
||||
U32 secondHalfMatchLength = currSeq.matchLength + currSeq.litLength - endPosInSequence;
|
||||
if (secondHalfMatchLength < MINMATCH) {
|
||||
/* Move the endPosInSequence backward so that it creates match of MINMATCH length */
|
||||
endPosInSequence -= MINMATCH - secondHalfMatchLength;
|
||||
bytesAdjustment = MINMATCH - secondHalfMatchLength;
|
||||
if (secondHalfMatchLength < cctx->appliedParams.cParams.minMatch) {
|
||||
/* Move the endPosInSequence backward so that it creates match of minMatch length */
|
||||
endPosInSequence -= cctx->appliedParams.cParams.minMatch - secondHalfMatchLength;
|
||||
bytesAdjustment = cctx->appliedParams.cParams.minMatch - secondHalfMatchLength;
|
||||
firstHalfMatchLength -= bytesAdjustment;
|
||||
}
|
||||
matchLength = firstHalfMatchLength;
|
||||
@@ -4886,6 +4886,7 @@ size_t ZSTD_compressSequences(ZSTD_CCtx* const cctx, void* dst, size_t dstCapaci
|
||||
DEBUGLOG(3, "ZSTD_compressSequences()");
|
||||
assert(cctx != NULL);
|
||||
FORWARD_IF_ERROR(ZSTD_CCtx_init_compressStream2(cctx, ZSTD_e_end, srcSize), "CCtx initialization failed");
|
||||
RETURN_ERROR_IF(inSeqsSize > cctx->seqStore.maxNbSeq, memory_allocation, "Not enough memory allocated. Try adjusting ZSTD_c_minMatch.");
|
||||
/* Begin writing output, starting with frame header */
|
||||
frameHeaderSize = ZSTD_writeFrameHeader(op, dstCapacity, &cctx->appliedParams, srcSize, cctx->dictID);
|
||||
op += frameHeaderSize;
|
||||
|
||||
Reference in New Issue
Block a user