From 426944c3e31c13e0eecce63983d543f14b5caeb0 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Fri, 9 Feb 2018 13:10:32 -0800 Subject: [PATCH] fixed strict aliasing issue tuned threshold --- lib/decompress/zstd_decompress.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/decompress/zstd_decompress.c b/lib/decompress/zstd_decompress.c index 3d1f3640..63985933 100644 --- a/lib/decompress/zstd_decompress.c +++ b/lib/decompress/zstd_decompress.c @@ -1394,10 +1394,11 @@ static size_t ZSTD_decompressSequencesLong( static unsigned -ZSTD_shareLongOffsets(const FSE_DTable* offTable) +ZSTD_getLongOffsetsShare(const FSE_DTable* offTable) { - U32 const tableLog = ((const FSE_DTableHeader*)offTable)[0].tableLog; - const FSE_decode_t* table = (const FSE_decode_t*)(offTable + 1); + const void* ptr = offTable; + U32 const tableLog = ((const FSE_DTableHeader*)ptr)[0].tableLog; + const FSE_decode_t* table = ((const FSE_decode_t*)ptr) + 1; U32 const max = 1 << tableLog; U32 u, total = 0; @@ -1442,8 +1443,8 @@ static size_t ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx, srcSize -= seqHSize; if (dctx->fParams.windowSize > (1<<24)) { - U32 const shareLongOffsets = ZSTD_shareLongOffsets(dctx->entropy.OFTable); - U32 const minShare = MEM_64bits() ? 12 : 20; + U32 const shareLongOffsets = ZSTD_getLongOffsetsShare(dctx->entropy.OFTable); + U32 const minShare = MEM_64bits() ? 5 : 13; if (shareLongOffsets >= minShare) return ZSTD_decompressSequencesLong(dctx, dst, dstCapacity, ip, srcSize, nbSeq, isLongOffset); }