authorgravatar for igor.anic@gmail.comIgor Anić <igor.anic@gmail.com> 2025-08-08 17:21:45+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-08 12:28:00-07:00
log3ea015db968644c3f4e88fff59b9741b4903d478
tree4afe864313c3eb2f7b30395897238d773d33f8fe
parent23fff3442de38877c556f3cda19f3cccef255f7a

Io.Reader fix defaultReadVec

Running tar.pipeToFileSystem compressed_mingw_includes.tar file from #24732 finishes in infinite loop calling defaultReadVec with: r.seek = 1024 r.end = 1024 r.buffer.len = 1024 first.len = 512 that combination calls vtable.stream with 0 capacity writer and loops forever. Comment is to use whichever has larger capacity, and this fix reflects that.

1 files changed, 1 insertions(+), 1 deletions(-)

lib/std/Io/Reader.zig+1-1
...@@ -426,7 +426,7 @@ pub fn readVec(r: *Reader, data: [][]u8) Error!usize {...@@ -426,7 +426,7 @@ pub fn readVec(r: *Reader, data: [][]u8) Error!usize {
426/// Writes to `Reader.buffer` or `data`, whichever has larger capacity.426/// Writes to `Reader.buffer` or `data`, whichever has larger capacity.
427pub fn defaultReadVec(r: *Reader, data: [][]u8) Error!usize {427pub fn defaultReadVec(r: *Reader, data: [][]u8) Error!usize {
428 const first = data[0];428 const first = data[0];
429 if (r.seek == r.end and first.len >= r.buffer.len) {429 if (first.len >= r.buffer.len - r.end) {
430 var writer: Writer = .{430 var writer: Writer = .{
431 .buffer = first,431 .buffer = first,
432 .end = 0,432 .end = 0,