Support for nbSeq > 32767
tamed -Wstrict-aliasing warning
This commit is contained in:
+5
-11
@@ -212,8 +212,8 @@ static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc,
|
|||||||
zc->seqStore.litLengthFreq = zc->seqStore.litFreq + (1<<Litbits);
|
zc->seqStore.litLengthFreq = zc->seqStore.litFreq + (1<<Litbits);
|
||||||
zc->seqStore.matchLengthFreq = zc->seqStore.litLengthFreq + (1<<LLbits);
|
zc->seqStore.matchLengthFreq = zc->seqStore.litLengthFreq + (1<<LLbits);
|
||||||
zc->seqStore.offCodeFreq = zc->seqStore.matchLengthFreq + (1<<MLbits);
|
zc->seqStore.offCodeFreq = zc->seqStore.matchLengthFreq + (1<<MLbits);
|
||||||
zc->seqStore.matchTable = (ZSTD_match_t*)(zc->seqStore.offCodeFreq + (1<<Offbits));
|
zc->seqStore.matchTable = (ZSTD_match_t*)(void*)(zc->seqStore.offCodeFreq + (1<<Offbits));
|
||||||
zc->seqStore.priceTable = (ZSTD_optimal_t*)(zc->seqStore.matchTable + ZSTD_OPT_NUM+1);
|
zc->seqStore.priceTable = (ZSTD_optimal_t*)(void*)(zc->seqStore.matchTable + ZSTD_OPT_NUM+1);
|
||||||
|
|
||||||
zc->seqStore.litLengthSum = 0;
|
zc->seqStore.litLengthSum = 0;
|
||||||
zc->hbSize = 0;
|
zc->hbSize = 0;
|
||||||
@@ -546,17 +546,11 @@ size_t ZSTD_compressSequences(ZSTD_CCtx* zc,
|
|||||||
op += cSize;
|
op += cSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ZSTD_OPT_DEBUG >= 5
|
|
||||||
if (nbSeq >= 32768)
|
|
||||||
printf("ERROR: nbSeq=%d\n", (int)nbSeq);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Sequences Header */
|
/* Sequences Header */
|
||||||
if ((oend-op) < MIN_SEQUENCES_SIZE) return ERROR(dstSize_tooSmall);
|
if ((oend-op) < MIN_SEQUENCES_SIZE) return ERROR(dstSize_tooSmall);
|
||||||
if (nbSeq < 128) *op++ = (BYTE)nbSeq;
|
if (nbSeq < 0x7F) *op++ = (BYTE)nbSeq;
|
||||||
else {
|
else if (nbSeq < LONGNBSEQ) op[0] = (BYTE)((nbSeq>>8) + 0x80), op[1] = (BYTE)nbSeq, op+=2;
|
||||||
op[0] = (BYTE)((nbSeq>>8) + 128); op[1] = (BYTE)nbSeq; op+=2;
|
else op[0]=0xFF, MEM_writeLE16(op+1, (U16)(nbSeq - LONGNBSEQ)), op+=3;
|
||||||
}
|
|
||||||
if (nbSeq==0) goto _check_compressibility;
|
if (nbSeq==0) goto _check_compressibility;
|
||||||
|
|
||||||
/* dumps : contains rests of large lengths */
|
/* dumps : contains rests of large lengths */
|
||||||
|
|||||||
@@ -496,9 +496,14 @@ size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* dumpsLen
|
|||||||
/* SeqHead */
|
/* SeqHead */
|
||||||
*nbSeq = *ip++;
|
*nbSeq = *ip++;
|
||||||
if (*nbSeq==0) return 1;
|
if (*nbSeq==0) return 1;
|
||||||
if (*nbSeq >= 128)
|
if (*nbSeq >= 0x7F) {
|
||||||
*nbSeq = ((nbSeq[0]-128)<<8) + *ip++;
|
if (*nbSeq == 0xFF)
|
||||||
|
*nbSeq = MEM_readLE16(ip) + LONGNBSEQ, ip+=2;
|
||||||
|
else
|
||||||
|
*nbSeq = ((nbSeq[0]-0x80)<<8) + *ip++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FSE table descriptors */
|
||||||
LLtype = *ip >> 6;
|
LLtype = *ip >> 6;
|
||||||
Offtype = (*ip >> 4) & 3;
|
Offtype = (*ip >> 4) & 3;
|
||||||
MLtype = (*ip >> 2) & 3;
|
MLtype = (*ip >> 2) & 3;
|
||||||
|
|||||||
+2
-1
@@ -105,12 +105,13 @@ static const size_t ZSTD_frameHeaderSize_min = 5;
|
|||||||
#define OffFSELog 9
|
#define OffFSELog 9
|
||||||
#define MaxSeq MAX(MaxLL, MaxML)
|
#define MaxSeq MAX(MaxLL, MaxML)
|
||||||
|
|
||||||
|
#define LONGNBSEQ 0xFF00
|
||||||
|
|
||||||
#define FSE_ENCODING_RAW 0
|
#define FSE_ENCODING_RAW 0
|
||||||
#define FSE_ENCODING_RLE 1
|
#define FSE_ENCODING_RLE 1
|
||||||
#define FSE_ENCODING_STATIC 2
|
#define FSE_ENCODING_STATIC 2
|
||||||
#define FSE_ENCODING_DYNAMIC 3
|
#define FSE_ENCODING_DYNAMIC 3
|
||||||
|
|
||||||
|
|
||||||
#define HufLog 12
|
#define HufLog 12
|
||||||
|
|
||||||
#define MIN_SEQUENCES_SIZE 1 /* nbSeq==0 */
|
#define MIN_SEQUENCES_SIZE 1 /* nbSeq==0 */
|
||||||
|
|||||||
Reference in New Issue
Block a user