Commit 1a862175d5
Changed files (2)
lib
std
compress
zstandard
lib/std/compress/zstandard/decompress.zig
@@ -497,6 +497,11 @@ pub fn decodeZstandardFrameBlocksArrayList(
&consumed_count,
frame_context.block_size_max,
);
+ if (frame_context.content_size) |size| {
+ if (dest.items.len - initial_len > size) {
+ return error.BadContentSize;
+ }
+ }
if (written_size > 0) {
const written_slice = ring_buffer.sliceLast(written_size);
try dest.appendSlice(written_slice.first);
@@ -508,9 +513,8 @@ pub fn decodeZstandardFrameBlocksArrayList(
}
if (block_header.last_block) break;
}
- const added_len = dest.items.len - initial_len;
if (frame_context.content_size) |size| {
- if (added_len != size) {
+ if (dest.items.len - initial_len != size) {
return error.BadContentSize;
}
}
lib/std/compress/zstandard.zig
@@ -177,9 +177,14 @@ pub fn ZstandardStream(
) catch
return error.MalformedBlock;
+ if (self.frame_context.content_size) |size| {
+ if (self.current_frame_decompressed_size > size) return error.MalformedFrame;
+ }
+
+ const size = self.buffer.len();
+ self.current_frame_decompressed_size += size;
+
if (self.frame_context.hasher_opt) |*hasher| {
- const size = self.buffer.len();
- self.current_frame_decompressed_size += size;
if (size > 0) {
const written_slice = self.buffer.sliceLast(size);
hasher.update(written_slice.first);