mirror of
https://github.com/facebook/zstd.git
synced 2025-03-07 01:10:04 +02:00
fixed minor decompression bug in buffered mode
This commit is contained in:
parent
d3cb690156
commit
e4fdad55dc
@ -439,11 +439,16 @@ size_t ZBUFF_decompressContinue(ZBUFF_DCtx* zbc, void* dst, size_t* maxDstSizePt
|
|||||||
if (zbc->outBuff == NULL) return ERROR(memory_allocation);
|
if (zbc->outBuff == NULL) return ERROR(memory_allocation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
memcpy(zbc->inBuff, zbc->headerBuffer, zbc->hPos);
|
if (zbc->hPos)
|
||||||
zbc->inPos = zbc->hPos;
|
{
|
||||||
zbc->hPos = 0;
|
/* some data already loaded into headerBuffer : transfer into inBuff */
|
||||||
zbc->stage = ZBUFFds_load;
|
memcpy(zbc->inBuff, zbc->headerBuffer, zbc->hPos);
|
||||||
break; /* useless : stage follows */
|
zbc->inPos = zbc->hPos;
|
||||||
|
zbc->hPos = 0;
|
||||||
|
zbc->stage = ZBUFFds_load;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
zbc->stage = ZBUFFds_read;
|
||||||
|
|
||||||
case ZBUFFds_read:
|
case ZBUFFds_read:
|
||||||
{
|
{
|
||||||
|
@ -68,7 +68,6 @@
|
|||||||
# include "zstd_legacy.h"
|
# include "zstd_legacy.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* *******************************************************
|
/* *******************************************************
|
||||||
* Compiler specifics
|
* Compiler specifics
|
||||||
*********************************************************/
|
*********************************************************/
|
||||||
@ -120,7 +119,7 @@ const char* ZSTD_getErrorName(size_t code) { return ERR_getErrorName(code); }
|
|||||||
/* *************************************************************
|
/* *************************************************************
|
||||||
* Context management
|
* Context management
|
||||||
***************************************************************/
|
***************************************************************/
|
||||||
typedef enum { ZSTDds_getFrameHeaderSize, ZSTDds_decodeFrameHeader,
|
typedef enum { ZSTDds_getFrameHeaderSize, ZSTDds_decodeFrameHeader,
|
||||||
ZSTDds_decodeBlockHeader, ZSTDds_decompressBlock } ZSTD_dStage;
|
ZSTDds_decodeBlockHeader, ZSTDds_decompressBlock } ZSTD_dStage;
|
||||||
|
|
||||||
struct ZSTD_DCtx_s
|
struct ZSTD_DCtx_s
|
||||||
@ -449,7 +448,7 @@ 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++;
|
||||||
@ -801,7 +800,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* ctx, void* dst, size_t maxDstSize, con
|
|||||||
/* get frame header size */
|
/* get frame header size */
|
||||||
if (srcSize != ZSTD_frameHeaderSize_min) return ERROR(srcSize_wrong); /* impossible */
|
if (srcSize != ZSTD_frameHeaderSize_min) return ERROR(srcSize_wrong); /* impossible */
|
||||||
ctx->headerSize = ZSTD_decodeFrameHeader_Part1(ctx, src, ZSTD_frameHeaderSize_min);
|
ctx->headerSize = ZSTD_decodeFrameHeader_Part1(ctx, src, ZSTD_frameHeaderSize_min);
|
||||||
if (ZSTD_isError(ctx->headerSize)) return ctx->headerSize;
|
if (ZSTD_isError(ctx->headerSize)) return ctx->headerSize;
|
||||||
memcpy(ctx->headerBuffer, src, ZSTD_frameHeaderSize_min);
|
memcpy(ctx->headerBuffer, src, ZSTD_frameHeaderSize_min);
|
||||||
if (ctx->headerSize > ZSTD_frameHeaderSize_min)
|
if (ctx->headerSize > ZSTD_frameHeaderSize_min)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user