commit 5a31fc2014ed6c1d806d08f1393e10b597ec427d (tree)
parent 8fd41314bdb81303d8e674d292a384c9df352a05
Author: dweiller <4678790+dweiller@users.noreplay.github.com>
Date: Sun, 12 Feb 2023 22:02:24 +1100
std.compress.zstandard: fix erroneous literal stream empty checks
Diffstat:
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/lib/std/compress/zstandard/decode/block.zig b/lib/std/compress/zstandard/decode/block.zig
@@ -678,7 +678,12 @@ pub fn decodeBlock(
bytes_written += len;
}
- if (!decode_state.isLiteralStreamEmpty()) return error.MalformedCompressedBlock;
+ switch (decode_state.literal_header.block_type) {
+ .treeless, .compressed => {
+ if (!decode_state.isLiteralStreamEmpty()) return error.MalformedCompressedBlock;
+ },
+ .raw, .rle => {},
+ }
consumed_count.* += block_size;
return bytes_written;
@@ -766,7 +771,12 @@ pub fn decodeBlockRingBuffer(
bytes_written += len;
}
- if (!decode_state.isLiteralStreamEmpty()) return error.MalformedCompressedBlock;
+ switch (decode_state.literal_header.block_type) {
+ .treeless, .compressed => {
+ if (!decode_state.isLiteralStreamEmpty()) return error.MalformedCompressedBlock;
+ },
+ .raw, .rle => {},
+ }
consumed_count.* += block_size;
if (bytes_written > block_size_max) return error.BlockSizeOverMaximum;
@@ -853,7 +863,12 @@ pub fn decodeBlockReader(
bytes_written += len;
}
- if (!decode_state.isLiteralStreamEmpty()) return error.MalformedCompressedBlock;
+ switch (decode_state.literal_header.block_type) {
+ .treeless, .compressed => {
+ if (!decode_state.isLiteralStreamEmpty()) return error.MalformedCompressedBlock;
+ },
+ .raw, .rle => {},
+ }
if (bytes_written > block_size_max) return error.BlockSizeOverMaximum;
if (block_reader_limited.bytes_left != 0) return error.MalformedCompressedBlock;