mirror of
https://github.com/facebook/zstd.git
synced 2025-12-08 00:03:24 -05:00
Merge pull request #1594 from terrelln/legacy-fix
[legacy] Fix Huffman jump table reads in v01 and v05
This commit is contained in:
commit
9ad7ea44ec
@ -1073,6 +1073,8 @@ static size_t HUF_decompress_usingDTable( /* -3% slower when non static */
|
|||||||
const void* cSrc, size_t cSrcSize,
|
const void* cSrc, size_t cSrcSize,
|
||||||
const U16* DTable)
|
const U16* DTable)
|
||||||
{
|
{
|
||||||
|
if (cSrcSize < 6) return (size_t)-FSE_ERROR_srcSize_wrong;
|
||||||
|
{
|
||||||
BYTE* const ostart = (BYTE*) dst;
|
BYTE* const ostart = (BYTE*) dst;
|
||||||
BYTE* op = ostart;
|
BYTE* op = ostart;
|
||||||
BYTE* const omax = op + maxDstSize;
|
BYTE* const omax = op + maxDstSize;
|
||||||
@ -1114,14 +1116,14 @@ static size_t HUF_decompress_usingDTable( /* -3% slower when non static */
|
|||||||
for ( ; (reloadStatus<FSE_DStream_completed) && (op<olimit); /* D2-3-4 are supposed to be synchronized and finish together */
|
for ( ; (reloadStatus<FSE_DStream_completed) && (op<olimit); /* D2-3-4 are supposed to be synchronized and finish together */
|
||||||
op+=16, reloadStatus = FSE_reloadDStream(&bitD2) | FSE_reloadDStream(&bitD3) | FSE_reloadDStream(&bitD4), FSE_reloadDStream(&bitD1))
|
op+=16, reloadStatus = FSE_reloadDStream(&bitD2) | FSE_reloadDStream(&bitD3) | FSE_reloadDStream(&bitD4), FSE_reloadDStream(&bitD1))
|
||||||
{
|
{
|
||||||
#define HUF_DECODE_SYMBOL_0(n, Dstream) \
|
#define HUF_DECODE_SYMBOL_0(n, Dstream) \
|
||||||
op[n] = HUF_decodeSymbol(&Dstream, dt, dtLog);
|
op[n] = HUF_decodeSymbol(&Dstream, dt, dtLog);
|
||||||
|
|
||||||
#define HUF_DECODE_SYMBOL_1(n, Dstream) \
|
#define HUF_DECODE_SYMBOL_1(n, Dstream) \
|
||||||
op[n] = HUF_decodeSymbol(&Dstream, dt, dtLog); \
|
op[n] = HUF_decodeSymbol(&Dstream, dt, dtLog); \
|
||||||
if (FSE_32bits() && (HUF_MAX_TABLELOG>12)) FSE_reloadDStream(&Dstream)
|
if (FSE_32bits() && (HUF_MAX_TABLELOG>12)) FSE_reloadDStream(&Dstream)
|
||||||
|
|
||||||
#define HUF_DECODE_SYMBOL_2(n, Dstream) \
|
#define HUF_DECODE_SYMBOL_2(n, Dstream) \
|
||||||
op[n] = HUF_decodeSymbol(&Dstream, dt, dtLog); \
|
op[n] = HUF_decodeSymbol(&Dstream, dt, dtLog); \
|
||||||
if (FSE_32bits()) FSE_reloadDStream(&Dstream)
|
if (FSE_32bits()) FSE_reloadDStream(&Dstream)
|
||||||
|
|
||||||
@ -1166,6 +1168,7 @@ static size_t HUF_decompress_usingDTable( /* -3% slower when non static */
|
|||||||
if (op==omax) return (size_t)-FSE_ERROR_dstSize_tooSmall; /* dst buffer is full, but cSrc unfinished */
|
if (op==omax) return (size_t)-FSE_ERROR_dstSize_tooSmall; /* dst buffer is full, but cSrc unfinished */
|
||||||
|
|
||||||
return (size_t)-FSE_ERROR_corruptionDetected;
|
return (size_t)-FSE_ERROR_corruptionDetected;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1998,6 +1998,9 @@ size_t HUFv05_decompress4X2_usingDTable(
|
|||||||
const void* cSrc, size_t cSrcSize,
|
const void* cSrc, size_t cSrcSize,
|
||||||
const U16* DTable)
|
const U16* DTable)
|
||||||
{
|
{
|
||||||
|
/* Check */
|
||||||
|
if (cSrcSize < 10) return ERROR(corruption_detected); /* strict minimum : jump table + 1 byte per stream */
|
||||||
|
{
|
||||||
const BYTE* const istart = (const BYTE*) cSrc;
|
const BYTE* const istart = (const BYTE*) cSrc;
|
||||||
BYTE* const ostart = (BYTE*) dst;
|
BYTE* const ostart = (BYTE*) dst;
|
||||||
BYTE* const oend = ostart + dstSize;
|
BYTE* const oend = ostart + dstSize;
|
||||||
@ -2029,9 +2032,6 @@ size_t HUFv05_decompress4X2_usingDTable(
|
|||||||
BYTE* op4 = opStart4;
|
BYTE* op4 = opStart4;
|
||||||
U32 endSignal;
|
U32 endSignal;
|
||||||
|
|
||||||
/* Check */
|
|
||||||
if (cSrcSize < 10) return ERROR(corruption_detected); /* strict minimum : jump table + 1 byte per stream */
|
|
||||||
|
|
||||||
length4 = cSrcSize - (length1 + length2 + length3 + 6);
|
length4 = cSrcSize - (length1 + length2 + length3 + 6);
|
||||||
if (length4 > cSrcSize) return ERROR(corruption_detected); /* overflow */
|
if (length4 > cSrcSize) return ERROR(corruption_detected); /* overflow */
|
||||||
errorCode = BITv05_initDStream(&bitD1, istart1, length1);
|
errorCode = BITv05_initDStream(&bitD1, istart1, length1);
|
||||||
@ -2083,6 +2083,7 @@ size_t HUFv05_decompress4X2_usingDTable(
|
|||||||
|
|
||||||
/* decoded size */
|
/* decoded size */
|
||||||
return dstSize;
|
return dstSize;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user