Fix warnings and make validation enabled by default
diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c
index 263a450..e6257ba 100644
--- a/lib/compress/zstd_compress.c
+++ b/lib/compress/zstd_compress.c
@@ -4492,9 +4492,8 @@
U64 posInSrc; /* Number of bytes given by sequences provided so far */
} ZSTD_sequencePosition;
-#if defined(DEBUGLEVEL) && (DEBUGLEVEL >= 6)
/* Returns a ZSTD error code if sequence is not valid */
-static size_t ZSTD_validateSequence(U32 offCode, U32 repCode, U32 matchLength,
+static size_t ZSTD_validateSequence(U32 offCode, U32 matchLength,
size_t posInSrc, U32 windowLog, U32 dictSize) {
U32 offsetBound;
U32 windowSize = 1 << windowLog;
@@ -4504,11 +4503,10 @@
* window size. After output surpasses windowSize, we're limited to windowSize offsets again.
*/
offsetBound = posInSrc > windowSize ? windowSize : posInSrc + dictSize;
- RETURN_ERROR_IF(!repCode && offCode - ZSTD_REP_MOVE > offsetBound, corruption_detected, "Offset too large!");
+ RETURN_ERROR_IF(offCode > offsetBound + ZSTD_REP_MOVE, corruption_detected, "Offset too large!");
RETURN_ERROR_IF(matchLength < MINMATCH, corruption_detected, "Matchlength too small");
return 0;
}
-#endif
/* Returns an offset code, given a sequence's raw offset, the ongoing repcode array, and whether litLength == 0 */
static U32 ZSTD_finalizeOffCode(U32 rawOffset, const U32* const rep, U32 ll0) {
@@ -4539,7 +4537,7 @@
const void* src, size_t blockSize, ZSTD_CCtx* cctx) {
size_t idx = seqPos->idx;
BYTE const* ip = (BYTE const*)(src);
- const BYTE const* iend = ip + blockSize;
+ const BYTE* const iend = ip + blockSize;
repcodes_t updatedRepcodes;
U32 dictSize;
U32 litLength;
@@ -4563,14 +4561,11 @@
updatedRepcodes = ZSTD_updateRep(updatedRepcodes.rep, offCode, ll0);
DEBUGLOG(6, "Storing sequence: (of: %u, ml: %u, ll: %u)", offCode, matchLength, litLength);
-#if defined(DEBUGLEVEL) && (DEBUGLEVEL >= 6)
seqPos->posInSrc += litLength;
- FORWARD_IF_ERROR(ZSTD_validateSequence(offCode, repCode, matchLength,
- seqPos->posInSrc, cctx->appliedParams.cParams.windowLog,
- dictSize),
+ FORWARD_IF_ERROR(ZSTD_validateSequence(offCode, matchLength, seqPos->posInSrc,
+ cctx->appliedParams.cParams.windowLog, dictSize),
"Sequence validation failed");
seqPos->posInSrc += matchLength;
-#endif
ZSTD_storeSeq(seqStore, litLength, ip, iend, offCode, matchLength - MINMATCH);
ip += matchLength + litLength;
}
@@ -4580,9 +4575,7 @@
DEBUGLOG(6, "Storing last literals of size: %u", inSeqs[idx].litLength);
ZSTD_storeLastLiterals(seqStore, ip, inSeqs[idx].litLength);
ip += inSeqs[idx].litLength;
-#if defined(DEBUGLEVEL) && (DEBUGLEVEL >= 6)
seqPos->posInSrc += inSeqs[idx].litLength;
-#endif
}
RETURN_ERROR_IF(ip != iend, corruption_detected, "Blocksize doesn't agree with block delimiter!");
seqPos->idx = idx+1;
@@ -4616,7 +4609,6 @@
U32 matchLength;
U32 rawOffset;
U32 offCode;
- U32 repCode;
if (cctx->cdict) {
dictSize = cctx->cdict->dictContentSize;
@@ -4625,15 +4617,14 @@
} else {
dictSize = 0;
}
- DEBUGLOG(5, "ZSTD_copySequencesToSeqStore: idx: %zu PIS: %u blockSize: %zu windowSize: %u", idx, startPosInSequence, blockSize, windowSize);
- DEBUGLOG(5, "Start seq: idx: %u (of: %u ml: %u ll: %u)", idx, inSeqs[idx].offset, inSeqs[idx].matchLength, inSeqs[idx].litLength);
+ DEBUGLOG(5, "ZSTD_copySequencesToSeqStore: idx: %zu PIS: %zu blockSize: %zu", idx, startPosInSequence, blockSize);
+ DEBUGLOG(5, "Start seq: idx: %zu (of: %u ml: %u ll: %u)", idx, inSeqs[idx].offset, inSeqs[idx].matchLength, inSeqs[idx].litLength);
ZSTD_memcpy(updatedRepcodes.rep, cctx->blockState.prevCBlock->rep, sizeof(repcodes_t));
while (endPosInSequence && idx < inSeqsSize && !finalMatchSplit) {
const ZSTD_Sequence currSeq = inSeqs[idx];
litLength = currSeq.litLength;
matchLength = currSeq.matchLength;
rawOffset = currSeq.offset;
- repCode = 0;
/* Modify the sequence depending on where endPosInSequence lies */
if (endPosInSequence >= currSeq.litLength + currSeq.matchLength) {
@@ -4651,11 +4642,12 @@
} else {
/* This is the final (partial) sequence we're adding from inSeqs, and endPosInSequence
does not reach the end of the match. So, we have to split the sequence */
- DEBUGLOG(6, "Require a split: diff: %u, idx: %u PIS: %u",
+ DEBUGLOG(6, "Require a split: diff: %zu, idx: %zu PIS: %zu",
currSeq.litLength + currSeq.matchLength - endPosInSequence, idx, endPosInSequence);
if (endPosInSequence > litLength) {
+ U32 firstHalfMatchLength;
litLength = startPosInSequence >= litLength ? 0 : litLength - startPosInSequence;
- U32 firstHalfMatchLength = endPosInSequence - startPosInSequence - litLength;
+ firstHalfMatchLength = endPosInSequence - startPosInSequence - litLength;
if (matchLength > blockSize && firstHalfMatchLength >= MINMATCH) {
/* Only ever split the match if it is larger than the block size */
U32 secondHalfMatchLength = currSeq.matchLength + currSeq.litLength - endPosInSequence;
@@ -4690,14 +4682,11 @@
updatedRepcodes = ZSTD_updateRep(updatedRepcodes.rep, offCode, ll0);
}
-#if defined(DEBUGLEVEL) && (DEBUGLEVEL >= 6)
seqPos->posInSrc += litLength;
- FORWARD_IF_ERROR(ZSTD_validateSequence(offCode, repCode,
- matchLength, seqPos->posInSrc,
+ FORWARD_IF_ERROR(ZSTD_validateSequence(offCode, matchLength, seqPos->posInSrc,
cctx->appliedParams.cParams.windowLog, dictSize),
"Sequence validation failed");
seqPos->posInSrc += matchLength;
-#endif
DEBUGLOG(6, "Storing sequence: (of: %u, ml: %u, ll: %u)", offCode, matchLength, litLength);
ZSTD_storeSeq(seqStore, litLength, ip, iend, offCode, matchLength - MINMATCH);
ip += matchLength + litLength;
@@ -4714,9 +4703,7 @@
assert(ip <= iend);
DEBUGLOG(6, "Storing last literals of size: %u", lastLLSize);
ZSTD_storeLastLiterals(seqStore, ip, lastLLSize);
-#if defined(DEBUGLEVEL) && (DEBUGLEVEL >= 6)
seqPos->posInSrc += lastLLSize;
-#endif
}
return bytesAdjustment;