From 8752d80c8444249ff6b62e40f918bf53b4bad2b8 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 25 Jul 2025 13:55:02 -0700 Subject: [PATCH] std.compress.zstd.Decompress: fix bytes_written tracking --- lib/std/compress/zstd/Decompress.zig | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/std/compress/zstd/Decompress.zig b/lib/std/compress/zstd/Decompress.zig index e0edd045d7..b831fe7fb4 100644 --- a/lib/std/compress/zstd/Decompress.zig +++ b/lib/std/compress/zstd/Decompress.zig @@ -224,11 +224,6 @@ fn readInFrame(d: *Decompress, w: *Writer, limit: Limit, state: *State.InFrame) } if (bytes_written > frame_block_size_max) return error.BlockOversize; - - state.decompressed_size += bytes_written; - if (state.frame.content_size) |size| { - if (state.decompressed_size > size) return error.MalformedFrame; - } }, .reserved => return error.ReservedBlock, } @@ -240,6 +235,8 @@ fn readInFrame(d: *Decompress, w: *Writer, limit: Limit, state: *State.InFrame) } } + state.decompressed_size += bytes_written; + if (block_header.last) { if (state.frame.has_checksum) { const expected_checksum = try in.takeInt(u32, .little); @@ -254,6 +251,8 @@ fn readInFrame(d: *Decompress, w: *Writer, limit: Limit, state: *State.InFrame) } } d.state = .new_frame; + } else if (state.frame.content_size) |content_size| { + if (state.decompressed_size > content_size) return error.MalformedFrame; } return bytes_written;