Commit 5a31fc2014

dweiller <4678790+dweiller@users.noreplay.github.com>
2023-02-12 12:02:24
std.compress.zstandard: fix erroneous literal stream empty checks
1 parent 8fd4131
Changed files (1)
lib
std
compress
zstandard
decode
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;