Commit 8f4229158b

Andrew Kelley <andrew@ziglang.org>
2025-07-01 00:52:13
std.io.Writer.Allocating: extra ensure byte
So that when returning from drain there is always capacity for at least one more byte.
1 parent d03d273
Changed files (1)
lib
std
lib/std/io/Writer.zig
@@ -2158,8 +2158,11 @@ pub const Allocating = struct {
         var list = a.toArrayList();
         defer setArrayList(a, list);
         const start_len = list.items.len;
+        // Even if we append no data, this function needs to ensure there is more
+        // capacity in the buffer to avoid infinite loop, hence the +1 in this loop.
+        assert(data.len != 0);
         for (data) |bytes| {
-            list.ensureUnusedCapacity(gpa, bytes.len + splat_len) catch return error.WriteFailed;
+            list.ensureUnusedCapacity(gpa, bytes.len + splat_len + 1) catch return error.WriteFailed;
             list.appendSliceAssumeCapacity(bytes);
         }
         if (splat == 0) {