From a892e253742c5e447a1664d1bc925d0ea8e69ac8 Mon Sep 17 00:00:00 2001 From: Nick Terrell Date: Tue, 23 Apr 2019 14:07:36 -0700 Subject: [PATCH 1/2] [libzstd] Error if all sequence bits aren't consumed --- lib/decompress/zstd_decompress_block.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/decompress/zstd_decompress_block.c b/lib/decompress/zstd_decompress_block.c index a2a7eedcf..34b82bf41 100644 --- a/lib/decompress/zstd_decompress_block.c +++ b/lib/decompress/zstd_decompress_block.c @@ -930,6 +930,7 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx, /* check if reached exact end */ DEBUGLOG(5, "ZSTD_decompressSequences_body: after decode loop, remaining nbSeq : %i", nbSeq); RETURN_ERROR_IF(nbSeq, corruption_detected); + RETURN_ERROR_IF(BIT_reloadDStream(&seqState.DStream) < BIT_DStream_completed, corruption_detected); /* save reps for next block */ { U32 i; for (i=0; ientropy.rep[i] = (U32)(seqState.prevOffset[i]); } } From 5f228f8db22a492c8a38410d7f3b86d8d98e6b8e Mon Sep 17 00:00:00 2001 From: Nick Terrell Date: Tue, 23 Apr 2019 14:22:16 -0700 Subject: [PATCH 2/2] [libzstd] Add a ZSTD_STATIC_ASSERT for BIT_DStream_status --- lib/decompress/zstd_decompress_block.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/decompress/zstd_decompress_block.c b/lib/decompress/zstd_decompress_block.c index 34b82bf41..7707c28bb 100644 --- a/lib/decompress/zstd_decompress_block.c +++ b/lib/decompress/zstd_decompress_block.c @@ -918,6 +918,11 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx, ZSTD_initFseState(&seqState.stateOffb, &seqState.DStream, dctx->OFTptr); ZSTD_initFseState(&seqState.stateML, &seqState.DStream, dctx->MLTptr); + ZSTD_STATIC_ASSERT( + BIT_DStream_unfinished < BIT_DStream_completed && + BIT_DStream_endOfBuffer < BIT_DStream_completed && + BIT_DStream_completed < BIT_DStream_overflow); + for ( ; (BIT_reloadDStream(&(seqState.DStream)) <= BIT_DStream_completed) && nbSeq ; ) { nbSeq--; { seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset);