diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2025-07-11 10:03:54 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2025-07-14 00:14:21 -0700 |
| commit | 5496901e713dc1a75de289d7e8e3c79e7fee9510 (patch) | |
| tree | 269aa691017a66c9256f914b90308447a9a3a77c /lib | |
| parent | 093fe02b75a4a28f7faecea63ce2ae9639ef5b66 (diff) | |
| download | zig-5496901e713dc1a75de289d7e8e3c79e7fee9510.tar.gz zig-5496901e713dc1a75de289d7e8e3c79e7fee9510.zip | |
std.Io.Reader.appendRemaining: add missing assert
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/std/Build/Cache.zig | 3 | ||||
| -rw-r--r-- | lib/std/Io/Reader.zig | 4 |
2 files changed, 5 insertions, 2 deletions
diff --git a/lib/std/Build/Cache.zig b/lib/std/Build/Cache.zig index 826e5db460..9e5ad20f93 100644 --- a/lib/std/Build/Cache.zig +++ b/lib/std/Build/Cache.zig @@ -661,7 +661,8 @@ pub const Manifest = struct { } { const gpa = self.cache.gpa; const input_file_count = self.files.entries.len; - var manifest_reader = self.manifest_file.?.reader(&.{}); // Reads positionally from zero. + var tiny_buffer: [1]u8 = undefined; // allows allocRemaining to detect limit exceeded + var manifest_reader = self.manifest_file.?.reader(&tiny_buffer); // Reads positionally from zero. const limit: std.io.Limit = .limited(manifest_file_size_max); const file_contents = manifest_reader.interface.allocRemaining(gpa, limit) catch |err| switch (err) { error.OutOfMemory => return error.OutOfMemory, diff --git a/lib/std/Io/Reader.zig b/lib/std/Io/Reader.zig index e6a7afeb3e..c8bd0f3000 100644 --- a/lib/std/Io/Reader.zig +++ b/lib/std/Io/Reader.zig @@ -245,6 +245,7 @@ pub fn appendRemaining( list: *std.ArrayListAlignedUnmanaged(u8, alignment), limit: Limit, ) LimitedAllocError!void { + assert(r.buffer.len != 0); // Needed to detect limit exceeded without losing data. const buffer = r.buffer; const buffer_contents = buffer[r.seek..r.end]; const copy_len = limit.minInt(buffer_contents.len); @@ -1657,11 +1658,12 @@ test "readAlloc when the backing reader provides one byte at a time" { } }; const str = "This is a test"; + var tiny_buffer: [1]u8 = undefined; var one_byte_stream: OneByteReader = .{ .str = str, .i = 0, .reader = .{ - .buffer = &.{}, + .buffer = &tiny_buffer, .vtable = &.{ .stream = OneByteReader.stream }, .seek = 0, .end = 0, |
