zlib_wrapper's uncompress() uses ZSTD_isFrame() for routing
more generic and safer than using own routing for magic number comparison
This commit is contained in:
parent
dcb7535352
commit
4effccbf56
@ -22,7 +22,7 @@
|
|||||||
/*-****************************************
|
/*-****************************************
|
||||||
* Version
|
* Version
|
||||||
******************************************/
|
******************************************/
|
||||||
unsigned ZSTD_versionNumber (void) { return ZSTD_VERSION_NUMBER; }
|
unsigned ZSTD_versionNumber(void) { return ZSTD_VERSION_NUMBER; }
|
||||||
|
|
||||||
const char* ZSTD_versionString(void) { return ZSTD_VERSION_STRING; }
|
const char* ZSTD_versionString(void) { return ZSTD_VERSION_STRING; }
|
||||||
|
|
||||||
|
@ -204,16 +204,14 @@ static void ZSTD_initDCtx_internal(ZSTD_DCtx* dctx)
|
|||||||
|
|
||||||
ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customMem)
|
ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customMem)
|
||||||
{
|
{
|
||||||
ZSTD_DCtx* dctx;
|
if (!customMem.customAlloc ^ !customMem.customFree) return NULL;
|
||||||
|
|
||||||
if (!customMem.customAlloc ^ !customMem.customFree)
|
{ ZSTD_DCtx* const dctx = (ZSTD_DCtx*)ZSTD_malloc(sizeof(*dctx), customMem);
|
||||||
return NULL;
|
|
||||||
|
|
||||||
dctx = (ZSTD_DCtx*)ZSTD_malloc(sizeof(ZSTD_DCtx), customMem);
|
|
||||||
if (!dctx) return NULL;
|
if (!dctx) return NULL;
|
||||||
memcpy(&dctx->customMem, &customMem, sizeof(customMem));
|
dctx->customMem = customMem;
|
||||||
ZSTD_initDCtx_internal(dctx);
|
ZSTD_initDCtx_internal(dctx);
|
||||||
return dctx;
|
return dctx;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ZSTD_DCtx* ZSTD_initStaticDCtx(void *workspace, size_t workspaceSize)
|
ZSTD_DCtx* ZSTD_initStaticDCtx(void *workspace, size_t workspaceSize)
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#define ZLIB_CONST
|
#define ZLIB_CONST
|
||||||
#include <zlib.h> /* without #define Z_PREFIX */
|
#include <zlib.h> /* without #define Z_PREFIX */
|
||||||
#include "zstd_zlibwrapper.h"
|
#include "zstd_zlibwrapper.h"
|
||||||
#define ZSTD_STATIC_LINKING_ONLY /* ZSTD_MAGICNUMBER */
|
#define ZSTD_STATIC_LINKING_ONLY /* ZSTD_isFrame, ZSTD_MAGICNUMBER */
|
||||||
#include "zstd.h"
|
#include "zstd.h"
|
||||||
#include "zstd_internal.h" /* ZSTD_malloc, ZSTD_free */
|
#include "zstd_internal.h" /* ZSTD_malloc, ZSTD_free */
|
||||||
|
|
||||||
@ -1004,9 +1004,9 @@ ZEXTERN int ZEXPORT z_compress2 OF((Bytef *dest, uLongf *destLen,
|
|||||||
return compress2(dest, destLen, source, sourceLen, level);
|
return compress2(dest, destLen, source, sourceLen, level);
|
||||||
|
|
||||||
{ size_t dstCapacity = *destLen;
|
{ size_t dstCapacity = *destLen;
|
||||||
size_t const errorCode = ZSTD_compress(dest, dstCapacity, source, sourceLen, level);
|
size_t const cSize = ZSTD_compress(dest, dstCapacity, source, sourceLen, level);
|
||||||
if (ZSTD_isError(errorCode)) return Z_STREAM_ERROR;
|
if (ZSTD_isError(cSize)) return Z_STREAM_ERROR;
|
||||||
*destLen = errorCode;
|
*destLen = cSize;
|
||||||
}
|
}
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
@ -1024,13 +1024,13 @@ ZEXTERN uLong ZEXPORT z_compressBound OF((uLong sourceLen))
|
|||||||
ZEXTERN int ZEXPORT z_uncompress OF((Bytef *dest, uLongf *destLen,
|
ZEXTERN int ZEXPORT z_uncompress OF((Bytef *dest, uLongf *destLen,
|
||||||
const Bytef *source, uLong sourceLen))
|
const Bytef *source, uLong sourceLen))
|
||||||
{
|
{
|
||||||
if (sourceLen < 4 || MEM_readLE32(source) != ZSTD_MAGICNUMBER)
|
if (!ZSTD_isFrame(source, sourceLen))
|
||||||
return uncompress(dest, destLen, source, sourceLen);
|
return uncompress(dest, destLen, source, sourceLen);
|
||||||
|
|
||||||
{ size_t dstCapacity = *destLen;
|
{ size_t dstCapacity = *destLen;
|
||||||
size_t const errorCode = ZSTD_decompress(dest, dstCapacity, source, sourceLen);
|
size_t const dSize = ZSTD_decompress(dest, dstCapacity, source, sourceLen);
|
||||||
if (ZSTD_isError(errorCode)) return Z_STREAM_ERROR;
|
if (ZSTD_isError(dSize)) return Z_STREAM_ERROR;
|
||||||
*destLen = errorCode;
|
*destLen = dSize;
|
||||||
}
|
}
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user