mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 04:48:20 +00:00
std.fs.File.Reader: fix wrong calculation when reading
This commit is contained in:
parent
55d6341eab
commit
bc9db143c9
@ -1083,7 +1083,7 @@ pub const Reader = struct {
|
||||
return error.EndOfStream;
|
||||
}
|
||||
r.pos += n;
|
||||
return w.advanceVector(n);
|
||||
return n;
|
||||
},
|
||||
.streaming_reading => {
|
||||
if (is_windows) {
|
||||
@ -1106,7 +1106,7 @@ pub const Reader = struct {
|
||||
return error.EndOfStream;
|
||||
}
|
||||
r.pos += n;
|
||||
return w.advanceVector(n);
|
||||
return n;
|
||||
},
|
||||
.failure => return error.ReadFailed,
|
||||
}
|
||||
|
||||
@ -701,9 +701,13 @@ pub const Reader = struct {
|
||||
var hp: HeadParser = .{ .state = .seen_rn };
|
||||
var trailers_len: usize = 2;
|
||||
while (true) {
|
||||
if (trailers_len >= in.buffer.len) return error.HttpHeadersOversize;
|
||||
try in.fill(trailers_len + 1);
|
||||
trailers_len += hp.feed(in.buffered()[trailers_len..]);
|
||||
if (in.buffer.len - trailers_len == 0) return error.HttpHeadersOversize;
|
||||
const remaining = in.buffered()[trailers_len..];
|
||||
if (remaining.len == 0) {
|
||||
try in.fillMore();
|
||||
continue;
|
||||
}
|
||||
trailers_len += hp.feed(remaining);
|
||||
if (hp.state == .finished) {
|
||||
reader.state = .ready;
|
||||
reader.trailers = in.buffered()[0..trailers_len];
|
||||
|
||||
@ -942,7 +942,7 @@ pub fn fill(r: *Reader, n: usize) Error!void {
|
||||
writer.end = r.end;
|
||||
r.end += r.vtable.stream(r, &writer, .limited(r.buffer.len - r.end)) catch |err| switch (err) {
|
||||
error.WriteFailed => unreachable,
|
||||
else => |e| return e,
|
||||
error.ReadFailed, error.EndOfStream => |e| return e,
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -1168,9 +1168,9 @@ fn takeMultipleOf7Leb128(r: *Reader, comptime Result: type) TakeLeb128Error!Resu
|
||||
|
||||
/// Left-aligns data such that `r.seek` becomes zero.
|
||||
pub fn rebase(r: *Reader) void {
|
||||
if (r.seek == 0) return;
|
||||
const data = r.buffer[r.seek..r.end];
|
||||
const dest = r.buffer[0..data.len];
|
||||
std.mem.copyForwards(u8, dest, data);
|
||||
@memmove(r.buffer[0..data.len], data);
|
||||
r.seek = 0;
|
||||
r.end = data.len;
|
||||
}
|
||||
|
||||
@ -1943,7 +1943,7 @@ pub const Stream = struct {
|
||||
else => |err| return windows.unexpectedWSAError(err),
|
||||
};
|
||||
if (n == 0) return error.EndOfStream;
|
||||
return io_w.advanceVector(n);
|
||||
return n;
|
||||
}
|
||||
},
|
||||
else => struct {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user