authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-26 20:49:37-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-26 21:00:58-07:00
log980445f08bfee496f4e784b05653e1698addaac8
treeb6073503e8f18cd04f8df385023ef8c058fa8f19
parent722e066173f5235b1dd1b341acb5cb1e79002ed7

std.compress.lzma: fix unpacked size checking logic


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

lib/std/compress/lzma2.zig+3-2
......@@ -226,18 +226,19 @@ pub const Decode = struct {
226226 try ld.resetState(allocating.allocator, new_props);
227227 }
228228
229 const expected_unpacked_size = accum.len + unpacked_size;
229230 const start_count = n_read;
230231 var range_decoder = try lzma.RangeDecoder.initCounting(reader, &n_read);
231232
232233 while (true) {
233 if (accum.len >= unpacked_size) break;
234 if (accum.len >= expected_unpacked_size) break;
234235 if (range_decoder.isFinished()) break;
235236 switch (try ld.process(reader, allocating, accum, &range_decoder, &n_read)) {
236237 .more => continue,
237238 .finished => break,
238239 }
239240 }
240 if (accum.len != unpacked_size) return error.DecompressedSizeMismatch;
241 if (accum.len != expected_unpacked_size) return error.DecompressedSizeMismatch;
241242 if (n_read - start_count != packed_size) return error.CompressedSizeMismatch;
242243
243244 return n_read;