authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-05-01 19:20:51-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-01 16:35:28-07:00
loga091ccb217b7374efb2630d7f063db6a83fbac33
tree2a2dd2b96ce853331d023d1afa55aa4331eb498c
parentb3da216f1b36b76d8591e64ad1f51079b81bfa8e

std.compress.zstd.Decompress: cap input buffer required size


1 files changed, 4 insertions(+), 2 deletions(-)

lib/std/compress/zstd/Decompress.zig+4-2
...@@ -578,8 +578,10 @@ pub const Frame = struct {...@@ -578,8 +578,10 @@ pub const Frame = struct {
578 @field(self, field_name).table = .{ .rle = try in.takeByte() };578 @field(self, field_name).table = .{ .rle = try in.takeByte() };
579 },579 },
580 .fse => {580 .fse => {
581 if (in.buffer.len < @intFromEnum(remaining.*)) return error.InputBufferUndersize;581 const max_table_size = 2048;
582 const limited_buffer = try in.peek(@intFromEnum(remaining.*));582 const peek_len: usize = remaining.minInt(max_table_size);
583 if (in.buffer.len < peek_len) return error.InputBufferUndersize;
584 const limited_buffer = try in.peek(peek_len);
583 var bit_reader: BitReader = .{ .bytes = limited_buffer };585 var bit_reader: BitReader = .{ .bytes = limited_buffer };
584 const table_size = try Table.decode(586 const table_size = try Table.decode(
585 &bit_reader,587 &bit_reader,