From: Yann Collet Date: Tue, 15 Mar 2016 00:33:36 +0000 (+0100) Subject: minor refactoring X-Git-Tag: v0.6.0^2~17^2~67^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1c2c2bcaffb95a9516b907aec35c2ae7a8183b09;p=thirdparty%2Fzstd.git minor refactoring --- diff --git a/lib/zstd_compress.c b/lib/zstd_compress.c index b1b106b2b..6afcddeb8 100644 --- a/lib/zstd_compress.c +++ b/lib/zstd_compress.c @@ -2205,19 +2205,20 @@ size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* zc, /* Write Frame Header into ctx headerBuffer */ MEM_writeLE32(zc->headerBuffer, ZSTD_MAGICNUMBER); { + BYTE* const op = (BYTE*)zc->headerBuffer; U32 const fcsSize[4] = { 0, 1, 2, 8 }; U32 const fcsId = (params.srcSize>0) + (params.srcSize>=256) + (params.srcSize>=65536+256); /* 0-3 */ BYTE fdescriptor = (BYTE)(params.windowLog - ZSTD_WINDOWLOG_ABSOLUTEMIN); /* windowLog : 4 KB - 128 MB */ fdescriptor |= (BYTE)((params.searchLength==3)<<4); /* mml : 3-4 */ fdescriptor |= (BYTE)(fcsId << 6); - ((BYTE*)zc->headerBuffer)[4] = fdescriptor; + op[4] = fdescriptor; switch(fcsId) { default: /* impossible */ case 0 : break; - case 1 : ((BYTE*)zc->headerBuffer)[5] = (BYTE)(params.srcSize); break; - case 2 : MEM_writeLE16(((BYTE*)zc->headerBuffer)+5, (U16)(params.srcSize-256)); break; - case 3 : MEM_writeLE64(((BYTE*)zc->headerBuffer)+5, (U64)(params.srcSize)); break; + case 1 : op[5] = (BYTE)(params.srcSize); break; + case 2 : MEM_writeLE16(op+5, (U16)(params.srcSize-256)); break; + case 3 : MEM_writeLE64(op+5, (U64)(params.srcSize)); break; } zc->hbSize = ZSTD_frameHeaderSize_min + fcsSize[fcsId]; } diff --git a/lib/zstd_decompress.c b/lib/zstd_decompress.c index 736e0a275..4007541c7 100644 --- a/lib/zstd_decompress.c +++ b/lib/zstd_decompress.c @@ -303,39 +303,38 @@ static size_t ZSTD_frameHeaderSize(const void* src, size_t srcSize) /** ZSTD_getFrameParams() : * decode Frame Header, or provide expected `srcSize`. * @return : 0, `fparamsPtr` is correctly filled, -* >0, not enough srcSize, provide expected `srcSize`, +* >0, `srcSize` is too small, result is expected `srcSize`, * or an error code, which can be tested using ZSTD_isError() */ -size_t ZSTD_getFrameParams(ZSTD_frameParams* fparamsPtr, const void* src, size_t srcSize) +size_t ZSTD_getFrameParams(ZSTD_frameParams* fparamsPtr, const void* src, size_t const srcSize) { const BYTE* ip = (const BYTE*)src; - BYTE frameDesc; if (srcSize < ZSTD_frameHeaderSize_min) return ZSTD_frameHeaderSize_min; if (MEM_readLE32(src) != ZSTD_MAGICNUMBER) return ERROR(prefix_unknown); + /* ensure there is enough `srcSize` to fully read/decode frame header */ { size_t const fhsize = ZSTD_frameHeaderSize(src, srcSize); if (srcSize < fhsize) return fhsize; } memset(fparamsPtr, 0, sizeof(*fparamsPtr)); - frameDesc = ip[4]; - fparamsPtr->windowLog = (frameDesc & 0xF) + ZSTD_WINDOWLOG_ABSOLUTEMIN; - fparamsPtr->mml = (frameDesc & 0x10) ? MINMATCH-1 : MINMATCH; - if ((frameDesc & 0x20) != 0) return ERROR(frameParameter_unsupported); /* reserved 1 bit */ - switch(frameDesc >> 6) /* fcsId */ - { - default: /* impossible */ - case 0 : fparamsPtr->frameContentSize = 0; break; - case 1 : fparamsPtr->frameContentSize = ip[5]; break; - case 2 : fparamsPtr->frameContentSize = MEM_readLE16(ip+5)+256; break; - case 3 : fparamsPtr->frameContentSize = MEM_readLE64(ip+5); break; - } + { BYTE const frameDesc = ip[4]; + fparamsPtr->windowLog = (frameDesc & 0xF) + ZSTD_WINDOWLOG_ABSOLUTEMIN; + fparamsPtr->mml = (frameDesc & 0x10) ? MINMATCH-1 : MINMATCH; + if ((frameDesc & 0x20) != 0) return ERROR(frameParameter_unsupported); /* reserved 1 bit */ + switch(frameDesc >> 6) /* fcsId */ + { + default: /* impossible */ + case 0 : fparamsPtr->frameContentSize = 0; break; + case 1 : fparamsPtr->frameContentSize = ip[5]; break; + case 2 : fparamsPtr->frameContentSize = MEM_readLE16(ip+5)+256; break; + case 3 : fparamsPtr->frameContentSize = MEM_readLE64(ip+5); break; + } } return 0; } /** ZSTD_decodeFrameHeader() : -* decode Frame Header. -* srcSize must be the size provided by ZSTD_decodeFrameHeader_Part1(). +* `srcSize` must be the size provided by ZSTD_frameHeaderSize(). * @return : 0, or an error code, which can be tested using ZSTD_isError() */ static size_t ZSTD_decodeFrameHeader(ZSTD_DCtx* zc, const void* src, size_t srcSize) {