Fix bugs in Windows readVec implementations

This commit is contained in:
Carl Åstholm 2025-08-20 01:08:41 +02:00 committed by Andrew Kelley
parent 51a2c0feaf
commit 9e9cb3ad6d
2 changed files with 14 additions and 13 deletions

View File

@ -1343,14 +1343,15 @@ pub const Reader = struct {
if (is_windows) { if (is_windows) {
// Unfortunately, `ReadFileScatter` cannot be used since it // Unfortunately, `ReadFileScatter` cannot be used since it
// requires page alignment. // requires page alignment.
assert(io_reader.seek == io_reader.end); if (io_reader.seek == io_reader.end) {
io_reader.seek = 0; io_reader.seek = 0;
io_reader.end = 0; io_reader.end = 0;
}
const first = data[0]; const first = data[0];
if (first.len >= io_reader.buffer.len) { if (first.len >= io_reader.buffer.len - io_reader.end) {
return readPositional(r, first); return readPositional(r, first);
} else { } else {
io_reader.end += try readPositional(r, io_reader.buffer); io_reader.end += try readPositional(r, io_reader.buffer[io_reader.end..]);
return 0; return 0;
} }
} }
@ -1391,14 +1392,15 @@ pub const Reader = struct {
if (is_windows) { if (is_windows) {
// Unfortunately, `ReadFileScatter` cannot be used since it // Unfortunately, `ReadFileScatter` cannot be used since it
// requires page alignment. // requires page alignment.
assert(io_reader.seek == io_reader.end); if (io_reader.seek == io_reader.end) {
io_reader.seek = 0; io_reader.seek = 0;
io_reader.end = 0; io_reader.end = 0;
}
const first = data[0]; const first = data[0];
if (first.len >= io_reader.buffer.len) { if (first.len >= io_reader.buffer.len - io_reader.end) {
return readStreaming(r, first); return readPositional(r, first);
} else { } else {
io_reader.end += try readStreaming(r, io_reader.buffer); io_reader.end += try readPositional(r, io_reader.buffer[io_reader.end..]);
return 0; return 0;
} }
} }

View File

@ -1992,8 +1992,7 @@ pub const Stream = struct {
}; };
if (n == 0) return error.EndOfStream; if (n == 0) return error.EndOfStream;
if (n > data_size) { if (n > data_size) {
io_r.seek = 0; io_r.end += n - data_size;
io_r.end = n - data_size;
return data_size; return data_size;
} }
return n; return n;