Skip to content

Commit 9e9cb3a

Browse files
castholmandrewrk
authored andcommitted
Fix bugs in Windows readVec implementations
1 parent 51a2c0f commit 9e9cb3a

File tree

2 files changed

+14
-13
lines changed

2 files changed

+14
-13
lines changed

lib/std/fs/File.zig

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1343,14 +1343,15 @@ pub const Reader = struct {
13431343
if (is_windows) {
13441344
// Unfortunately, `ReadFileScatter` cannot be used since it
13451345
// requires page alignment.
1346-
assert(io_reader.seek == io_reader.end);
1347-
io_reader.seek = 0;
1348-
io_reader.end = 0;
1346+
if (io_reader.seek == io_reader.end) {
1347+
io_reader.seek = 0;
1348+
io_reader.end = 0;
1349+
}
13491350
const first = data[0];
1350-
if (first.len >= io_reader.buffer.len) {
1351+
if (first.len >= io_reader.buffer.len - io_reader.end) {
13511352
return readPositional(r, first);
13521353
} else {
1353-
io_reader.end += try readPositional(r, io_reader.buffer);
1354+
io_reader.end += try readPositional(r, io_reader.buffer[io_reader.end..]);
13541355
return 0;
13551356
}
13561357
}
@@ -1391,14 +1392,15 @@ pub const Reader = struct {
13911392
if (is_windows) {
13921393
// Unfortunately, `ReadFileScatter` cannot be used since it
13931394
// requires page alignment.
1394-
assert(io_reader.seek == io_reader.end);
1395-
io_reader.seek = 0;
1396-
io_reader.end = 0;
1395+
if (io_reader.seek == io_reader.end) {
1396+
io_reader.seek = 0;
1397+
io_reader.end = 0;
1398+
}
13971399
const first = data[0];
1398-
if (first.len >= io_reader.buffer.len) {
1399-
return readStreaming(r, first);
1400+
if (first.len >= io_reader.buffer.len - io_reader.end) {
1401+
return readPositional(r, first);
14001402
} else {
1401-
io_reader.end += try readStreaming(r, io_reader.buffer);
1403+
io_reader.end += try readPositional(r, io_reader.buffer[io_reader.end..]);
14021404
return 0;
14031405
}
14041406
}

lib/std/net.zig

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1992,8 +1992,7 @@ pub const Stream = struct {
19921992
};
19931993
if (n == 0) return error.EndOfStream;
19941994
if (n > data_size) {
1995-
io_r.seek = 0;
1996-
io_r.end = n - data_size;
1995+
io_r.end += n - data_size;
19971996
return data_size;
19981997
}
19991998
return n;

0 commit comments

Comments
 (0)