From: Yann Collet Date: Mon, 19 Oct 2015 14:32:47 +0000 (+0100) Subject: Fixed sanitizer warning X-Git-Tag: zstd-0.2.0^2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1fbee1f483bf15a7f015b81ad1426d93215f9c52;p=thirdparty%2Fzstd.git Fixed sanitizer warning --- diff --git a/lib/zstd.c b/lib/zstd.c index 4b4909f2a..e4e34c49a 100644 --- a/lib/zstd.c +++ b/lib/zstd.c @@ -114,7 +114,7 @@ static const U32 g_searchStrength = 8; #define Offbits 5 #define MaxML ((1< iend-2) return ERROR(srcSize_wrong); /* min : "raw", hence no header, but at least xxLog bits */ - FSE_buildDTable_rle(DTableOffb, *ip++); break; + if (ip > iend-2) return ERROR(srcSize_wrong); /* min : "raw", hence no header, but at least xxLog bits */ + FSE_buildDTable_rle(DTableOffb, *ip++ & MaxOff); /* if *ip > MaxOff, data is corrupted */ + break; case bt_raw : Offlog = Offbits; FSE_buildDTable_raw(DTableOffb, Offbits); break; @@ -1269,9 +1270,10 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState) /* Offset */ { - static const size_t offsetPrefix[MaxOff+1] = { 1, 1, 2, 4, 8, 16, 32, 64, 128, 256, + static const size_t offsetPrefix[MaxOff+1] = { /* note : size_t faster than U32 */ + 1 /*fake*/, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, - 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432 }; + 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, /*fake*/ 1, 1, 1, 1, 1 }; U32 offsetCode, nbBits; offsetCode = FSE_decodeSymbol(&(seqState->stateOffb), &(seqState->DStream)); /* <= maxOff, by table construction */ if (MEM_32bits()) BIT_reloadDStream(&(seqState->DStream));