fixed : legacy decoders v04 and v05
This commit is contained in:
parent
cc3d1bc262
commit
b5fd15ccb2
@ -3012,20 +3012,19 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|||||||
/* Literal length */
|
/* Literal length */
|
||||||
litLength = FSE_decodeSymbol(&(seqState->stateLL), &(seqState->DStream));
|
litLength = FSE_decodeSymbol(&(seqState->stateLL), &(seqState->DStream));
|
||||||
prevOffset = litLength ? seq->offset : seqState->prevOffset;
|
prevOffset = litLength ? seq->offset : seqState->prevOffset;
|
||||||
if (litLength == MaxLL)
|
if (litLength == MaxLL) {
|
||||||
{
|
|
||||||
U32 add = *dumps++;
|
U32 add = *dumps++;
|
||||||
if (add < 255) litLength += add;
|
if (add < 255) litLength += add;
|
||||||
else {
|
else {
|
||||||
litLength = MEM_readLE32(dumps) & 0xFFFFFF; /* no pb : dumps is always followed by seq tables > 1 byte */
|
litLength = dumps[0] + (dumps[1]<<8) + (dumps[2]<<16);
|
||||||
dumps += 3;
|
dumps += 3;
|
||||||
}
|
}
|
||||||
if (dumps >= de) { dumps = de-1; litLength = MaxLL+255; } /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
if (dumps > de) { litLength = MaxLL+255; } /* late correction, to avoid using uninitialized memory */
|
||||||
|
if (dumps >= de) { dumps = de-1; } /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Offset */
|
/* Offset */
|
||||||
{
|
{ static const U32 offsetPrefix[MaxOff+1] = {
|
||||||
static const U32 offsetPrefix[MaxOff+1] = {
|
|
||||||
1 /*fake*/, 1, 2, 4, 8, 16, 32, 64, 128, 256,
|
1 /*fake*/, 1, 2, 4, 8, 16, 32, 64, 128, 256,
|
||||||
512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144,
|
512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144,
|
||||||
524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, /*fake*/ 1, 1, 1, 1, 1 };
|
524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, /*fake*/ 1, 1, 1, 1, 1 };
|
||||||
@ -3046,10 +3045,11 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|||||||
U32 add = *dumps++;
|
U32 add = *dumps++;
|
||||||
if (add < 255) matchLength += add;
|
if (add < 255) matchLength += add;
|
||||||
else {
|
else {
|
||||||
matchLength = MEM_readLE32(dumps) & 0xFFFFFF; /* no pb : dumps is always followed by seq tables > 1 byte */
|
matchLength = dumps[0] + (dumps[1]<<8) + (dumps[2]<<16);
|
||||||
dumps += 3;
|
dumps += 3;
|
||||||
}
|
}
|
||||||
if (dumps >= de) { dumps = de-1; matchLength = MaxML+255; } /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
if (dumps > de) { matchLength = MaxML+255; } /* late correction, to avoid using uninitialized memory */
|
||||||
|
if (dumps >= de) { dumps = de-1; } /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
||||||
}
|
}
|
||||||
matchLength += MINMATCH;
|
matchLength += MINMATCH;
|
||||||
|
|
||||||
|
@ -3230,7 +3230,8 @@ static void ZSTDv05_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|||||||
if (litLength&1) litLength>>=1, dumps += 3;
|
if (litLength&1) litLength>>=1, dumps += 3;
|
||||||
else litLength = (U16)(litLength)>>1, dumps += 2;
|
else litLength = (U16)(litLength)>>1, dumps += 2;
|
||||||
}
|
}
|
||||||
if (dumps >= de) { dumps = de-1; litLength = MaxLL+255; } /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
if (dumps > de) { litLength = MaxLL+255; } /* late correction, to avoid using uninitialized memory */
|
||||||
|
if (dumps >= de) { dumps = de-1; } /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Offset */
|
/* Offset */
|
||||||
@ -3263,7 +3264,8 @@ static void ZSTDv05_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|||||||
if (matchLength&1) matchLength>>=1, dumps += 3;
|
if (matchLength&1) matchLength>>=1, dumps += 3;
|
||||||
else matchLength = (U16)(matchLength)>>1, dumps += 2;
|
else matchLength = (U16)(matchLength)>>1, dumps += 2;
|
||||||
}
|
}
|
||||||
if (dumps >= de) { dumps = de-1; matchLength = MaxML+255; } /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
if (dumps > de) { matchLength = MaxML+255; } /* late correction, to avoid using uninitialized memory */
|
||||||
|
if (dumps >= de) { dumps = de-1; } /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
||||||
}
|
}
|
||||||
matchLength += MINMATCH;
|
matchLength += MINMATCH;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user