Reader.appendRemaining: Take ownership of the full allocated slice

Before this commit, calling appendRemaining with an ArrayList where list.items.len != list.capacity could result in illegal behavior if the Writer.Allocating resized the list during the appendRemaining call.

Fixes #25057
This commit is contained in:
Ryan Liptak 2025-08-28 00:26:57 -07:00 committed by Andrew Kelley
parent 73a0b5441b
commit 2b73c28cec

View File

@ -308,7 +308,7 @@ pub fn appendRemaining(
list: *ArrayList(u8),
limit: Limit,
) LimitedAllocError!void {
var a: std.Io.Writer.Allocating = .initOwnedSlice(gpa, list.items);
var a: std.Io.Writer.Allocating = .initOwnedSlice(gpa, list.allocatedSlice());
a.writer.end = list.items.len;
list.* = .empty;
defer {
@ -332,7 +332,7 @@ pub fn appendRemaining(
pub const UnlimitedAllocError = Allocator.Error || ShortError;
pub fn appendRemainingUnlimited(r: *Reader, gpa: Allocator, list: *ArrayList(u8)) UnlimitedAllocError!void {
var a: std.Io.Writer.Allocating = .initOwnedSlice(gpa, list.items);
var a: std.Io.Writer.Allocating = .initOwnedSlice(gpa, list.allocatedSlice());
a.writer.end = list.items.len;
list.* = .empty;
defer {