fixed potential dangling pointer, detected by @terrelln
parent
78b8234554
commit
c3bce24ef4
|
@ -263,7 +263,6 @@ typedef struct {
|
||||||
|
|
||||||
const seqStore_t* ZSTD_getSeqStore(const ZSTD_CCtx* ctx);
|
const seqStore_t* ZSTD_getSeqStore(const ZSTD_CCtx* ctx);
|
||||||
void ZSTD_seqToCodes(const seqStore_t* seqStorePtr);
|
void ZSTD_seqToCodes(const seqStore_t* seqStorePtr);
|
||||||
int ZSTD_isSkipFrame(ZSTD_DCtx* dctx);
|
|
||||||
|
|
||||||
/* custom memory allocation functions */
|
/* custom memory allocation functions */
|
||||||
void* ZSTD_malloc(size_t size, ZSTD_customMem customMem);
|
void* ZSTD_malloc(size_t size, ZSTD_customMem customMem);
|
||||||
|
|
|
@ -240,13 +240,13 @@ static void ZSTD_cLevelToCParams(ZSTD_CCtx* cctx)
|
||||||
cctx->compressionLevel = ZSTD_CLEVEL_CUSTOM;
|
cctx->compressionLevel = ZSTD_CLEVEL_CUSTOM;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, unsigned value)
|
|
||||||
{
|
|
||||||
#define CLAMPCHECK(val,min,max) { \
|
#define CLAMPCHECK(val,min,max) { \
|
||||||
if ((val<min) | (val>max)) { \
|
if (((val)<(min)) | ((val)>(max))) { \
|
||||||
return ERROR(compressionParameter_outOfBound); \
|
return ERROR(compressionParameter_outOfBound); \
|
||||||
} }
|
} }
|
||||||
|
|
||||||
|
size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, unsigned value)
|
||||||
|
{
|
||||||
if (cctx->streamStage != zcss_init) return ERROR(stage_wrong);
|
if (cctx->streamStage != zcss_init) return ERROR(stage_wrong);
|
||||||
|
|
||||||
switch(param)
|
switch(param)
|
||||||
|
@ -3347,10 +3347,10 @@ static size_t ZSTD_initCDict_internal(
|
||||||
cdict->dictContent = dictBuffer;
|
cdict->dictContent = dictBuffer;
|
||||||
} else {
|
} else {
|
||||||
void* const internalBuffer = ZSTD_malloc(dictSize, cdict->refContext->customMem);
|
void* const internalBuffer = ZSTD_malloc(dictSize, cdict->refContext->customMem);
|
||||||
if (!internalBuffer) return ERROR(memory_allocation);
|
|
||||||
memcpy(internalBuffer, dictBuffer, dictSize);
|
|
||||||
cdict->dictBuffer = internalBuffer;
|
cdict->dictBuffer = internalBuffer;
|
||||||
cdict->dictContent = internalBuffer;
|
cdict->dictContent = internalBuffer;
|
||||||
|
if (!internalBuffer) return ERROR(memory_allocation);
|
||||||
|
memcpy(internalBuffer, dictBuffer, dictSize);
|
||||||
}
|
}
|
||||||
cdict->dictContentSize = dictSize;
|
cdict->dictContentSize = dictSize;
|
||||||
|
|
||||||
|
|
|
@ -1688,21 +1688,22 @@ ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZSTD_isSkipFrame(ZSTD_DCtx* dctx) { return dctx->stage == ZSTDds_skipFrame; } /* for zbuff */
|
static int ZSTD_isSkipFrame(ZSTD_DCtx* dctx) { return dctx->stage == ZSTDds_skipFrame; }
|
||||||
|
|
||||||
/** ZSTD_decompressContinue() :
|
/** ZSTD_decompressContinue() :
|
||||||
|
* srcSize : must be the exact nb of bytes expected (see ZSTD_nextSrcSizeToDecompress())
|
||||||
* @return : nb of bytes generated into `dst` (necessarily <= `dstCapacity)
|
* @return : nb of bytes generated into `dst` (necessarily <= `dstCapacity)
|
||||||
* or an error code, which can be tested using ZSTD_isError() */
|
* or an error code, which can be tested using ZSTD_isError() */
|
||||||
size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize)
|
size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize)
|
||||||
{
|
{
|
||||||
/* Sanity check */
|
/* Sanity check */
|
||||||
if (srcSize != dctx->expected) return ERROR(srcSize_wrong);
|
if (srcSize != dctx->expected) return ERROR(srcSize_wrong); /* unauthorized */
|
||||||
if (dstCapacity) ZSTD_checkContinuity(dctx, dst);
|
if (dstCapacity) ZSTD_checkContinuity(dctx, dst);
|
||||||
|
|
||||||
switch (dctx->stage)
|
switch (dctx->stage)
|
||||||
{
|
{
|
||||||
case ZSTDds_getFrameHeaderSize :
|
case ZSTDds_getFrameHeaderSize :
|
||||||
if (srcSize != ZSTD_frameHeaderSize_prefix) return ERROR(srcSize_wrong); /* impossible */
|
if (srcSize != ZSTD_frameHeaderSize_prefix) return ERROR(srcSize_wrong); /* unauthorized */
|
||||||
if ((MEM_readLE32(src) & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) { /* skippable frame */
|
if ((MEM_readLE32(src) & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) { /* skippable frame */
|
||||||
memcpy(dctx->headerBuffer, src, ZSTD_frameHeaderSize_prefix);
|
memcpy(dctx->headerBuffer, src, ZSTD_frameHeaderSize_prefix);
|
||||||
dctx->expected = ZSTD_skippableHeaderSize - ZSTD_frameHeaderSize_prefix; /* magic number + skippable frame length */
|
dctx->expected = ZSTD_skippableHeaderSize - ZSTD_frameHeaderSize_prefix; /* magic number + skippable frame length */
|
||||||
|
@ -1747,7 +1748,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c
|
||||||
dctx->stage = ZSTDds_getFrameHeaderSize;
|
dctx->stage = ZSTDds_getFrameHeaderSize;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dctx->expected = 3; /* go directly to next header */
|
dctx->expected = ZSTD_blockHeaderSize; /* jump to next header */
|
||||||
dctx->stage = ZSTDds_decodeBlockHeader;
|
dctx->stage = ZSTDds_decodeBlockHeader;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue