diff --git a/lib/std/fs/File.zig b/lib/std/fs/File.zig index 1980056334..d50ed6f109 100644 --- a/lib/std/fs/File.zig +++ b/lib/std/fs/File.zig @@ -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, } diff --git a/lib/std/http.zig b/lib/std/http.zig index cc424f5c8d..51a4e2c318 100644 --- a/lib/std/http.zig +++ b/lib/std/http.zig @@ -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]; diff --git a/lib/std/io/Reader.zig b/lib/std/io/Reader.zig index a52d934844..f6bc1e3c1b 100644 --- a/lib/std/io/Reader.zig +++ b/lib/std/io/Reader.zig @@ -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; } diff --git a/lib/std/net.zig b/lib/std/net.zig index f616a52d3e..0a4303b6f4 100644 --- a/lib/std/net.zig +++ b/lib/std/net.zig @@ -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 {