authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-30 00:25:17-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-31 22:10:11-07:00
log84e4343b0c26a11cc667f8df3f9863b65bf1fa36
treee5a35872d2cda29d4ab7e4bc4144df523dc918f9
parentafe9f3a9ec10e1d92fa02ef91168301daac47c67

fix test failures by adding readVec


1 files changed, 21 insertions(+), 4 deletions(-)

lib/std/compress/flate/Decompress.zig+21-4
...@@ -60,7 +60,7 @@ pub fn init(input: *Reader, container: Container, buffer: []u8) Decompress {...@@ -60,7 +60,7 @@ pub fn init(input: *Reader, container: Container, buffer: []u8) Decompress {
60 .stream = stream,60 .stream = stream,
61 .rebase = rebase,61 .rebase = rebase,
62 .discard = discard,62 .discard = discard,
63 .readVec = Reader.indirectReadVec,63 .readVec = readVec,
64 },64 },
65 .buffer = buffer,65 .buffer = buffer,
66 .seek = 0,66 .seek = 0,
...@@ -109,6 +109,22 @@ fn discard(r: *Reader, limit: std.Io.Limit) Reader.Error!usize {...@@ -109,6 +109,22 @@ fn discard(r: *Reader, limit: std.Io.Limit) Reader.Error!usize {
109 return n;109 return n;
110}110}
111111
112fn readVec(r: *Reader, data: []const []u8) Reader.Error!usize {
113 _ = data;
114 assert(r.seek == r.end);
115 r.rebase(flate.history_len) catch unreachable;
116 var writer: Writer = .{
117 .buffer = r.buffer,
118 .end = r.end,
119 .vtable = &.{ .drain = Writer.fixedDrain },
120 };
121 r.end += r.vtable.stream(r, &writer, .limited(writer.buffer.len - writer.end)) catch |err| switch (err) {
122 error.WriteFailed => unreachable,
123 else => |e| return e,
124 };
125 return 0;
126}
127
112fn decodeLength(self: *Decompress, code: u8) !u16 {128fn decodeLength(self: *Decompress, code: u8) !u16 {
113 if (code > 28) return error.InvalidCode;129 if (code > 28) return error.InvalidCode;
114 const ml = Token.matchLength(code);130 const ml = Token.matchLength(code);
...@@ -1073,8 +1089,8 @@ test "reading into empty buffer" {...@@ -1073,8 +1089,8 @@ test "reading into empty buffer" {
1073 var in: Reader = .fixed(input);1089 var in: Reader = .fixed(input);
1074 var decomp: Decompress = .init(&in, .raw, &.{});1090 var decomp: Decompress = .init(&in, .raw, &.{});
1075 const r = &decomp.reader;1091 const r = &decomp.reader;
1076 var buf: [0]u8 = undefined;1092 var bufs: [1][]u8 = .{&.{}};
1077 try testing.expectEqual(0, try r.readVec(&.{&buf}));1093 try testing.expectEqual(0, try r.readVec(&bufs));
1078}1094}
10791095
1080test "zlib header" {1096test "zlib header" {
...@@ -1135,7 +1151,8 @@ test "zlib should not overshoot" {...@@ -1135,7 +1151,8 @@ test "zlib should not overshoot" {
11351151
1136 var reader: std.Io.Reader = .fixed(&data);1152 var reader: std.Io.Reader = .fixed(&data);
11371153
1138 var decompress: Decompress = .init(&reader, .zlib, &.{});1154 var decompress_buffer: [flate.max_window_len]u8 = undefined;
1155 var decompress: Decompress = .init(&reader, .zlib, &decompress_buffer);
1139 var out: [128]u8 = undefined;1156 var out: [128]u8 = undefined;
11401157
1141 {1158 {