std.compress.zstd.Decompress: fix bytes_written tracking

This commit is contained in:
Andrew Kelley 2025-07-25 13:55:02 -07:00
parent da51e94d50
commit 8752d80c84

View file

@ -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; 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, .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 (block_header.last) {
if (state.frame.has_checksum) { if (state.frame.has_checksum) {
const expected_checksum = try in.takeInt(u32, .little); 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; d.state = .new_frame;
} else if (state.frame.content_size) |content_size| {
if (state.decompressed_size > content_size) return error.MalformedFrame;
} }
return bytes_written; return bytes_written;