authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-06-27 14:43:32-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-01 16:35:30-07:00
logbc9db143c9e2beb166c637dd7fc56c4912f93794
treed0a012a59d96446892c6a1ed9a67650d58fe6604
parent55d6341eabf002017587863c92e6d5860527a72a

std.fs.File.Reader: fix wrong calculation when reading


4 files changed, 13 insertions(+), 9 deletions(-)

lib/std/fs/File.zig+2-2
...@@ -1083,7 +1083,7 @@ pub const Reader = struct {...@@ -1083,7 +1083,7 @@ pub const Reader = struct {
1083 return error.EndOfStream;1083 return error.EndOfStream;
1084 }1084 }
1085 r.pos += n;1085 r.pos += n;
1086 return w.advanceVector(n);1086 return n;
1087 },1087 },
1088 .streaming_reading => {1088 .streaming_reading => {
1089 if (is_windows) {1089 if (is_windows) {
...@@ -1106,7 +1106,7 @@ pub const Reader = struct {...@@ -1106,7 +1106,7 @@ pub const Reader = struct {
1106 return error.EndOfStream;1106 return error.EndOfStream;
1107 }1107 }
1108 r.pos += n;1108 r.pos += n;
1109 return w.advanceVector(n);1109 return n;
1110 },1110 },
1111 .failure => return error.ReadFailed,1111 .failure => return error.ReadFailed,
1112 }1112 }
lib/std/http.zig+7-3
...@@ -701,9 +701,13 @@ pub const Reader = struct {...@@ -701,9 +701,13 @@ pub const Reader = struct {
701 var hp: HeadParser = .{ .state = .seen_rn };701 var hp: HeadParser = .{ .state = .seen_rn };
702 var trailers_len: usize = 2;702 var trailers_len: usize = 2;
703 while (true) {703 while (true) {
704 if (trailers_len >= in.buffer.len) return error.HttpHeadersOversize;704 if (in.buffer.len - trailers_len == 0) return error.HttpHeadersOversize;
705 try in.fill(trailers_len + 1);705 const remaining = in.buffered()[trailers_len..];
706 trailers_len += hp.feed(in.buffered()[trailers_len..]);706 if (remaining.len == 0) {
707 try in.fillMore();
708 continue;
709 }
710 trailers_len += hp.feed(remaining);
707 if (hp.state == .finished) {711 if (hp.state == .finished) {
708 reader.state = .ready;712 reader.state = .ready;
709 reader.trailers = in.buffered()[0..trailers_len];713 reader.trailers = in.buffered()[0..trailers_len];
lib/std/io/Reader.zig+3-3
...@@ -942,7 +942,7 @@ pub fn fill(r: *Reader, n: usize) Error!void {...@@ -942,7 +942,7 @@ pub fn fill(r: *Reader, n: usize) Error!void {
942 writer.end = r.end;942 writer.end = r.end;
943 r.end += r.vtable.stream(r, &writer, .limited(r.buffer.len - r.end)) catch |err| switch (err) {943 r.end += r.vtable.stream(r, &writer, .limited(r.buffer.len - r.end)) catch |err| switch (err) {
944 error.WriteFailed => unreachable,944 error.WriteFailed => unreachable,
945 else => |e| return e,945 error.ReadFailed, error.EndOfStream => |e| return e,
946 };946 };
947 }947 }
948}948}
...@@ -1168,9 +1168,9 @@ fn takeMultipleOf7Leb128(r: *Reader, comptime Result: type) TakeLeb128Error!Resu...@@ -1168,9 +1168,9 @@ fn takeMultipleOf7Leb128(r: *Reader, comptime Result: type) TakeLeb128Error!Resu
11681168
1169/// Left-aligns data such that `r.seek` becomes zero.1169/// Left-aligns data such that `r.seek` becomes zero.
1170pub fn rebase(r: *Reader) void {1170pub fn rebase(r: *Reader) void {
1171 if (r.seek == 0) return;
1171 const data = r.buffer[r.seek..r.end];1172 const data = r.buffer[r.seek..r.end];
1172 const dest = r.buffer[0..data.len];1173 @memmove(r.buffer[0..data.len], data);
1173 std.mem.copyForwards(u8, dest, data);
1174 r.seek = 0;1174 r.seek = 0;
1175 r.end = data.len;1175 r.end = data.len;
1176}1176}
lib/std/net.zig+1-1
...@@ -1943,7 +1943,7 @@ pub const Stream = struct {...@@ -1943,7 +1943,7 @@ pub const Stream = struct {
1943 else => |err| return windows.unexpectedWSAError(err),1943 else => |err| return windows.unexpectedWSAError(err),
1944 };1944 };
1945 if (n == 0) return error.EndOfStream;1945 if (n == 0) return error.EndOfStream;
1946 return io_w.advanceVector(n);1946 return n;
1947 }1947 }
1948 },1948 },
1949 else => struct {1949 else => struct {