mirror of
https://github.com/facebook/zstd.git
synced 2025-10-10 00:03:36 -04:00
Merge pull request #1685 from vivekmig/dev
Add Check if Block Size Exceeds Maximum
This commit is contained in:
commit
f2620697c7
@ -909,6 +909,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c
|
|||||||
{ blockProperties_t bp;
|
{ blockProperties_t bp;
|
||||||
size_t const cBlockSize = ZSTD_getcBlockSize(src, ZSTD_blockHeaderSize, &bp);
|
size_t const cBlockSize = ZSTD_getcBlockSize(src, ZSTD_blockHeaderSize, &bp);
|
||||||
if (ZSTD_isError(cBlockSize)) return cBlockSize;
|
if (ZSTD_isError(cBlockSize)) return cBlockSize;
|
||||||
|
RETURN_ERROR_IF(cBlockSize > dctx->fParams.blockSizeMax, corruption_detected, "Block Size Exceeds Maximum");
|
||||||
dctx->expected = cBlockSize;
|
dctx->expected = cBlockSize;
|
||||||
dctx->bType = bp.blockType;
|
dctx->bType = bp.blockType;
|
||||||
dctx->rleSize = bp.origSize;
|
dctx->rleSize = bp.origSize;
|
||||||
@ -953,6 +954,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c
|
|||||||
RETURN_ERROR(corruption_detected);
|
RETURN_ERROR(corruption_detected);
|
||||||
}
|
}
|
||||||
if (ZSTD_isError(rSize)) return rSize;
|
if (ZSTD_isError(rSize)) return rSize;
|
||||||
|
RETURN_ERROR_IF(rSize > dctx->fParams.blockSizeMax, corruption_detected, "Decompressed Block Size Exceeds Maximum");
|
||||||
DEBUGLOG(5, "ZSTD_decompressContinue: decoded size from block : %u", (unsigned)rSize);
|
DEBUGLOG(5, "ZSTD_decompressContinue: decoded size from block : %u", (unsigned)rSize);
|
||||||
dctx->decodedSize += rSize;
|
dctx->decodedSize += rSize;
|
||||||
if (dctx->fParams.checksumFlag) XXH64_update(&dctx->xxhState, dst, rSize);
|
if (dctx->fParams.checksumFlag) XXH64_update(&dctx->xxhState, dst, rSize);
|
||||||
|
@ -1050,8 +1050,8 @@ static void writeBlock(U32* seed, frame_t* frame, size_t contentSize,
|
|||||||
op += contentSize;
|
op += contentSize;
|
||||||
blockType = 0;
|
blockType = 0;
|
||||||
blockSize = contentSize;
|
blockSize = contentSize;
|
||||||
} else if (blockTypeDesc == 1) {
|
} else if (blockTypeDesc == 1 && frame->header.contentSize > 0) {
|
||||||
/* RLE */
|
/* RLE (Don't create RLE block if frame content is 0 since block size of 1 may exceed max block size)*/
|
||||||
BYTE const symbol = RAND(seed) & 0xff;
|
BYTE const symbol = RAND(seed) & 0xff;
|
||||||
|
|
||||||
op[0] = symbol;
|
op[0] = symbol;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user