From d50bae4da9739cd3385463203a2c461f75c8597e Mon Sep 17 00:00:00 2001 From: Kamil T Date: Wed, 18 Sep 2024 09:41:46 +0100 Subject: [PATCH 1/2] Fix memcpy alias bug in std.compress.lzma --- lib/std/compress/lzma.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/std/compress/lzma.zig b/lib/std/compress/lzma.zig index ff05bc1c8b..aa35c3ffa9 100644 --- a/lib/std/compress/lzma.zig +++ b/lib/std/compress/lzma.zig @@ -77,7 +77,7 @@ pub fn Decompress(comptime ReaderType: type) type { const input = self.to_read.items; const n = @min(input.len, output.len); @memcpy(output[0..n], input[0..n]); - @memcpy(input[0 .. input.len - n], input[n..]); + std.mem.copyForwards(u8, input[0 .. input.len - n], input[n..]); self.to_read.shrinkRetainingCapacity(input.len - n); return n; } From 09d021c908b2c0c320e5b250656a3460ef07736c Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 20 Jan 2025 21:41:30 -0800 Subject: [PATCH 2/2] add test coverage for previous commit --- lib/std/compress/lzma/test.zig | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/std/compress/lzma/test.zig b/lib/std/compress/lzma/test.zig index c85090730f..eafb91b6bb 100644 --- a/lib/std/compress/lzma/test.zig +++ b/lib/std/compress/lzma/test.zig @@ -87,3 +87,13 @@ test "too small uncompressed size in header" { @embedFile("testdata/bad-too_small_size-without_eopm-3.lzma"), ); } + +test "reading one byte" { + const compressed = @embedFile("testdata/good-known_size-with_eopm.lzma"); + var stream = std.io.fixedBufferStream(compressed); + var decompressor = try lzma.decompress(std.testing.allocator, stream.reader()); + defer decompressor.deinit(); + + var buffer = [1]u8{0}; + _ = try decompressor.read(buffer[0..]); +}