From 3975a9d7ca2013a4ac667b637fb273a9432c53aa Mon Sep 17 00:00:00 2001 From: dweiller <4678790+dweiller@users.noreplay.github.com> Date: Thu, 9 Feb 2023 17:51:43 +1100 Subject: [PATCH] std.compress.zstandard: error when FSE bitstream is no fully consumed --- lib/std/compress/zstandard/decode/block.zig | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/std/compress/zstandard/decode/block.zig b/lib/std/compress/zstandard/decode/block.zig index 8be072af1c..2503180023 100644 --- a/lib/std/compress/zstandard/decode/block.zig +++ b/lib/std/compress/zstandard/decode/block.zig @@ -659,6 +659,10 @@ pub fn decodeBlock( sequence_size_limit -= decompressed_size; } + if (bit_stream.bit_reader.bit_count != 0) { + return error.MalformedCompressedBlock; + } + bytes_read += bit_stream_bytes.len; } if (bytes_read != block_size) return error.MalformedCompressedBlock; @@ -745,6 +749,10 @@ pub fn decodeBlockRingBuffer( sequence_size_limit -= decompressed_size; } + if (bit_stream.bit_reader.bit_count != 0) { + return error.MalformedCompressedBlock; + } + bytes_read += bit_stream_bytes.len; } if (bytes_read != block_size) return error.MalformedCompressedBlock; @@ -828,6 +836,9 @@ pub fn decodeBlockReader( sequence_size_limit -= decompressed_size; bytes_written += decompressed_size; } + if (bit_stream.bit_reader.bit_count != 0) { + return error.MalformedCompressedBlock; + } } if (decode_state.literal_written_count < literals.header.regenerated_size) {