mirror of
https://github.com/ziglang/zig.git
synced 2026-01-21 06:45:24 +00:00
std.compress.zstandard: fix zstandardStream content size validation
This commit is contained in:
parent
12aa478db0
commit
1a862175d5
@ -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);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user