Skip to content

Commit c9ff068

Browse files
committed
std.compress: fix discard impl and flate error detection
1 parent 165cd87 commit c9ff068

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

lib/std/compress/flate/Decompress.zig

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ fn discard(r: *Reader, limit: std.Io.Limit) Reader.Error!usize {
100100
.buffer = r.buffer,
101101
.end = r.end,
102102
};
103+
defer {
104+
r.end = writer.end;
105+
r.seek = r.end;
106+
}
103107
const n = r.stream(&writer, limit) catch |err| switch (err) {
104108
error.WriteFailed => unreachable,
105109
error.ReadFailed => return error.ReadFailed,
@@ -397,7 +401,7 @@ fn readInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader.S
397401
/// Write match (back-reference to the same data slice) starting at `distance`
398402
/// back from current write position, and `length` of bytes.
399403
fn writeMatch(w: *Writer, length: u16, distance: u16) !void {
400-
if (w.end < length) return error.InvalidMatch;
404+
if (w.end < distance) return error.InvalidMatch;
401405
if (length < Token.base_length) return error.InvalidMatch;
402406
if (length > Token.max_length) return error.InvalidMatch;
403407
if (distance < Token.min_distance) return error.InvalidMatch;

lib/std/compress/zstd/Decompress.zig

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,10 @@ fn discard(r: *Reader, limit: std.Io.Limit) Reader.Error!usize {
122122
.buffer = r.buffer,
123123
.end = r.end,
124124
};
125+
defer {
126+
r.end = writer.end;
127+
r.seek = r.end;
128+
}
125129
const n = r.stream(&writer, limit) catch |err| switch (err) {
126130
error.WriteFailed => unreachable,
127131
error.ReadFailed => return error.ReadFailed,

0 commit comments

Comments
 (0)