Merge pull request #1594 from terrelln/legacy-fix
[legacy] Fix Huffman jump table reads in v01 and v05
This commit is contained in:
@@ -1072,6 +1072,8 @@ static size_t HUF_decompress_usingDTable( /* -3% slower when non static */
|
|||||||
void* dst, size_t maxDstSize,
|
void* dst, size_t maxDstSize,
|
||||||
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;
|
||||||
@@ -1167,6 +1169,7 @@ static size_t HUF_decompress_usingDTable( /* -3% slower when non static */
|
|||||||
|
|
||||||
return (size_t)-FSE_ERROR_corruptionDetected;
|
return (size_t)-FSE_ERROR_corruptionDetected;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static size_t HUF_decompress (void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize)
|
static size_t HUF_decompress (void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize)
|
||||||
|
|||||||
@@ -1997,6 +1997,9 @@ size_t HUFv05_decompress4X2_usingDTable(
|
|||||||
void* dst, size_t dstSize,
|
void* dst, size_t dstSize,
|
||||||
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;
|
||||||
@@ -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);
|
||||||
@@ -2084,6 +2084,7 @@ size_t HUFv05_decompress4X2_usingDTable(
|
|||||||
/* decoded size */
|
/* decoded size */
|
||||||
return dstSize;
|
return dstSize;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
size_t HUFv05_decompress4X2 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize)
|
size_t HUFv05_decompress4X2 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize)
|
||||||
|
|||||||
Reference in New Issue
Block a user