Commit 84e4343b0c

Andrew Kelley <andrew@ziglang.org>
2025-07-30 09:25:17
fix test failures by adding readVec
1 parent afe9f3a
Changed files (1)
lib
std
compress
lib/std/compress/flate/Decompress.zig
@@ -60,7 +60,7 @@ pub fn init(input: *Reader, container: Container, buffer: []u8) Decompress {
                 .stream = stream,
                 .rebase = rebase,
                 .discard = discard,
-                .readVec = Reader.indirectReadVec,
+                .readVec = readVec,
             },
             .buffer = buffer,
             .seek = 0,
@@ -109,6 +109,22 @@ fn discard(r: *Reader, limit: std.Io.Limit) Reader.Error!usize {
     return n;
 }
 
+fn readVec(r: *Reader, data: []const []u8) Reader.Error!usize {
+    _ = data;
+    assert(r.seek == r.end);
+    r.rebase(flate.history_len) catch unreachable;
+    var writer: Writer = .{
+        .buffer = r.buffer,
+        .end = r.end,
+        .vtable = &.{ .drain = Writer.fixedDrain },
+    };
+    r.end += r.vtable.stream(r, &writer, .limited(writer.buffer.len - writer.end)) catch |err| switch (err) {
+        error.WriteFailed => unreachable,
+        else => |e| return e,
+    };
+    return 0;
+}
+
 fn decodeLength(self: *Decompress, code: u8) !u16 {
     if (code > 28) return error.InvalidCode;
     const ml = Token.matchLength(code);
@@ -1073,8 +1089,8 @@ test "reading into empty buffer" {
     var in: Reader = .fixed(input);
     var decomp: Decompress = .init(&in, .raw, &.{});
     const r = &decomp.reader;
-    var buf: [0]u8 = undefined;
-    try testing.expectEqual(0, try r.readVec(&.{&buf}));
+    var bufs: [1][]u8 = .{&.{}};
+    try testing.expectEqual(0, try r.readVec(&bufs));
 }
 
 test "zlib header" {
@@ -1135,7 +1151,8 @@ test "zlib should not overshoot" {
 
     var reader: std.Io.Reader = .fixed(&data);
 
-    var decompress: Decompress = .init(&reader, .zlib, &.{});
+    var decompress_buffer: [flate.max_window_len]u8 = undefined;
+    var decompress: Decompress = .init(&reader, .zlib, &decompress_buffer);
     var out: [128]u8 = undefined;
 
     {