authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-11 10:03:54-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-14 00:14:21-07:00
log5496901e713dc1a75de289d7e8e3c79e7fee9510
tree269aa691017a66c9256f914b90308447a9a3a77c
parent093fe02b75a4a28f7faecea63ce2ae9639ef5b66

std.Io.Reader.appendRemaining: add missing assert


2 files changed, 5 insertions(+), 2 deletions(-)

lib/std/Build/Cache.zig+2-1
...@@ -661,7 +661,8 @@ pub const Manifest = struct {...@@ -661,7 +661,8 @@ pub const Manifest = struct {
661 } {661 } {
662 const gpa = self.cache.gpa;662 const gpa = self.cache.gpa;
663 const input_file_count = self.files.entries.len;663 const input_file_count = self.files.entries.len;
664 var manifest_reader = self.manifest_file.?.reader(&.{}); // Reads positionally from zero.664 var tiny_buffer: [1]u8 = undefined; // allows allocRemaining to detect limit exceeded
665 var manifest_reader = self.manifest_file.?.reader(&tiny_buffer); // Reads positionally from zero.
665 const limit: std.io.Limit = .limited(manifest_file_size_max);666 const limit: std.io.Limit = .limited(manifest_file_size_max);
666 const file_contents = manifest_reader.interface.allocRemaining(gpa, limit) catch |err| switch (err) {667 const file_contents = manifest_reader.interface.allocRemaining(gpa, limit) catch |err| switch (err) {
667 error.OutOfMemory => return error.OutOfMemory,668 error.OutOfMemory => return error.OutOfMemory,
lib/std/Io/Reader.zig+3-1
...@@ -245,6 +245,7 @@ pub fn appendRemaining(...@@ -245,6 +245,7 @@ pub fn appendRemaining(
245 list: *std.ArrayListAlignedUnmanaged(u8, alignment),245 list: *std.ArrayListAlignedUnmanaged(u8, alignment),
246 limit: Limit,246 limit: Limit,
247) LimitedAllocError!void {247) LimitedAllocError!void {
248 assert(r.buffer.len != 0); // Needed to detect limit exceeded without losing data.
248 const buffer = r.buffer;249 const buffer = r.buffer;
249 const buffer_contents = buffer[r.seek..r.end];250 const buffer_contents = buffer[r.seek..r.end];
250 const copy_len = limit.minInt(buffer_contents.len);251 const copy_len = limit.minInt(buffer_contents.len);
...@@ -1657,11 +1658,12 @@ test "readAlloc when the backing reader provides one byte at a time" {...@@ -1657,11 +1658,12 @@ test "readAlloc when the backing reader provides one byte at a time" {
1657 }1658 }
1658 };1659 };
1659 const str = "This is a test";1660 const str = "This is a test";
1661 var tiny_buffer: [1]u8 = undefined;
1660 var one_byte_stream: OneByteReader = .{1662 var one_byte_stream: OneByteReader = .{
1661 .str = str,1663 .str = str,
1662 .i = 0,1664 .i = 0,
1663 .reader = .{1665 .reader = .{
1664 .buffer = &.{},1666 .buffer = &tiny_buffer,
1665 .vtable = &.{ .stream = OneByteReader.stream },1667 .vtable = &.{ .stream = OneByteReader.stream },
1666 .seek = 0,1668 .seek = 0,
1667 .end = 0,1669 .end = 0,