authorgravatar for 4678790+dweiller@users.noreply.github.comDominic <4678790+dweiller@users.noreply.github.com> 2023-02-12 22:02:24+11:00
committergravatar for 4678790+dweiller@users.noreply.github.comDominic <4678790+dweiller@users.noreply.github.com> 2023-02-20 09:09:06+11:00
log5a31fc2014ed6c1d806d08f1393e10b597ec427d
treee61f01d27271a7c91916870325705af5c7d5cf17
parent8fd41314bdb81303d8e674d292a384c9df352a05

std.compress.zstandard: fix erroneous literal stream empty checks


1 files changed, 18 insertions(+), 3 deletions(-)

lib/std/compress/zstandard/decode/block.zig+18-3
......@@ -678,7 +678,12 @@ pub fn decodeBlock(
678678 bytes_written += len;
679679 }
680680
681 if (!decode_state.isLiteralStreamEmpty()) return error.MalformedCompressedBlock;
681 switch (decode_state.literal_header.block_type) {
682 .treeless, .compressed => {
683 if (!decode_state.isLiteralStreamEmpty()) return error.MalformedCompressedBlock;
684 },
685 .raw, .rle => {},
686 }
682687
683688 consumed_count.* += block_size;
684689 return bytes_written;
......@@ -766,7 +771,12 @@ pub fn decodeBlockRingBuffer(
766771 bytes_written += len;
767772 }
768773
769 if (!decode_state.isLiteralStreamEmpty()) return error.MalformedCompressedBlock;
774 switch (decode_state.literal_header.block_type) {
775 .treeless, .compressed => {
776 if (!decode_state.isLiteralStreamEmpty()) return error.MalformedCompressedBlock;
777 },
778 .raw, .rle => {},
779 }
770780
771781 consumed_count.* += block_size;
772782 if (bytes_written > block_size_max) return error.BlockSizeOverMaximum;
......@@ -853,7 +863,12 @@ pub fn decodeBlockReader(
853863 bytes_written += len;
854864 }
855865
856 if (!decode_state.isLiteralStreamEmpty()) return error.MalformedCompressedBlock;
866 switch (decode_state.literal_header.block_type) {
867 .treeless, .compressed => {
868 if (!decode_state.isLiteralStreamEmpty()) return error.MalformedCompressedBlock;
869 },
870 .raw, .rle => {},
871 }
857872
858873 if (bytes_written > block_size_max) return error.BlockSizeOverMaximum;
859874 if (block_reader_limited.bytes_left != 0) return error.MalformedCompressedBlock;