authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-09-02 13:16:09-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2025-09-02 13:16:09-07:00
logd51d18c98654e09cb1af7f2896f97b81ce6c83bb
tree9aac4455c4d6f3d97a9a8ea46b6a30d8bfd096c9
parentf872dd03da64e5b53d3a5c7a95344b5b64a7aacb
parent90ac62cc751fa85bf572e281f65064bf2935ff9c
signaturebadge-check Signed by PGP key B5690EEEBB952194

Merge pull request #25105 from binarycraft007/lzma2-fix

lzma2: fix array list looping logic in appendLz

1 files changed, 11 insertions(+), 10 deletions(-)

lib/std/compress/lzma2.zig+11-10
...@@ -79,17 +79,18 @@ pub const AccumBuffer = struct {...@@ -79,17 +79,18 @@ pub const AccumBuffer = struct {
79 _ = writer;79 _ = writer;
8080
81 const buf_len = self.buf.items.len;81 const buf_len = self.buf.items.len;
82 if (dist > buf_len) {82 if (dist > buf_len) return error.CorruptInput;
83 return error.CorruptInput;
84 }
8583
86 var offset = buf_len - dist;84 try self.buf.ensureUnusedCapacity(allocator, len);
87 var i: usize = 0;85 const buffer = self.buf.allocatedSlice();
88 while (i < len) : (i += 1) {86 const src = buffer[buf_len - dist ..][0..len];
89 const x = self.buf.items[offset];87 const dst = buffer[buf_len..][0..len];
90 try self.buf.append(allocator, x);88
91 offset += 1;89 // This is not a @memmove; it intentionally repeats patterns caused by
92 }90 // iterating one byte at a time.
91 for (dst, src) |*d, s| d.* = s;
92
93 self.buf.items.len = buf_len + len;
93 self.len += len;94 self.len += len;
94 }95 }
9596