Merge pull request #1594 from terrelln/legacy-fix

[legacy] Fix Huffman jump table reads in v01 and v05
This commit is contained in:
Nick Terrell
2019-04-18 17:29:32 -07:00
committed by GitHub
2 changed files with 166 additions and 162 deletions
+3
View File
@@ -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)
+4 -3
View File
@@ -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)