fixed context copy

This commit is contained in:
Yann Collet
2016-01-07 23:07:44 +01:00
parent ecd651bd91
commit 6e1c4c6c65
2 changed files with 12 additions and 4 deletions
+11 -3
View File
@@ -1963,11 +1963,17 @@ size_t ZSTD_duplicateCCtx(ZSTD_CCtx* dstCCtx, const ZSTD_CCtx* srcCCtx)
{
void* dstWorkSpace = dstCCtx->workSpace;
size_t dstWorkSpaceSize = dstCCtx->workSpaceSize;
const U32 contentLog = (srcCCtx->params.strategy == ZSTD_fast) ? 1 : srcCCtx->params.contentLog;
const size_t tableSpace = ((1 << contentLog) + (1 << srcCCtx->params.hashLog)) * sizeof(U32);
const size_t blockSize = MIN(BLOCKSIZE, (size_t)1 << srcCCtx->params.windowLog);
const size_t neededSpace = tableSpace + (3*blockSize);
if (dstWorkSpaceSize < srcCCtx->workSpaceSize)
if (srcCCtx->stage!=0) return ERROR(stage_wrong);
if (dstWorkSpaceSize < neededSpace)
{
free(dstCCtx->workSpace);
dstWorkSpaceSize = srcCCtx->workSpaceSize;
free(dstWorkSpace);
dstWorkSpaceSize = neededSpace;
dstWorkSpace = malloc(dstWorkSpaceSize);
if (dstWorkSpace==NULL) return ERROR(memory_allocation);
}
@@ -1976,6 +1982,8 @@ size_t ZSTD_duplicateCCtx(ZSTD_CCtx* dstCCtx, const ZSTD_CCtx* srcCCtx)
dstCCtx->workSpace = dstWorkSpace;
dstCCtx->workSpaceSize = dstWorkSpaceSize;
memcpy(dstWorkSpace, srcCCtx->workSpace, tableSpace);
return 0;
}