| ... | ... | @@ -224,11 +224,6 @@ fn readInFrame(d: *Decompress, w: *Writer, limit: Limit, state: *State.InFrame) |
| 224 | 224 | } |
| 225 | 225 | |
| 226 | 226 | if (bytes_written > frame_block_size_max) return error.BlockOversize; |
| 227 | | |
| 228 | | state.decompressed_size += bytes_written; |
| 229 | | if (state.frame.content_size) |size| { |
| 230 | | if (state.decompressed_size > size) return error.MalformedFrame; |
| 231 | | } |
| 232 | 227 | }, |
| 233 | 228 | .reserved => return error.ReservedBlock, |
| 234 | 229 | } |
| ... | ... | @@ -240,6 +235,8 @@ fn readInFrame(d: *Decompress, w: *Writer, limit: Limit, state: *State.InFrame) |
| 240 | 235 | } |
| 241 | 236 | } |
| 242 | 237 | |
| 238 | state.decompressed_size += bytes_written; |
| 239 | |
| 243 | 240 | if (block_header.last) { |
| 244 | 241 | if (state.frame.has_checksum) { |
| 245 | 242 | const expected_checksum = try in.takeInt(u32, .little); |
| ... | ... | @@ -254,6 +251,8 @@ fn readInFrame(d: *Decompress, w: *Writer, limit: Limit, state: *State.InFrame) |
| 254 | 251 | } |
| 255 | 252 | } |
| 256 | 253 | d.state = .new_frame; |
| 254 | } else if (state.frame.content_size) |content_size| { |
| 255 | if (state.decompressed_size > content_size) return error.MalformedFrame; |
| 257 | 256 | } |
| 258 | 257 | |
| 259 | 258 | return bytes_written; |