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:
Yann Collet 2017-06-02 14:24:58 -07:00
parent dcb7535352
commit 4effccbf56
3 changed files with 16 additions and 18 deletions

View File

@ -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; }

View File

@ -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)

View File

@ -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;
} }