From 91640f5f819de5bb6211d6bfa3c778737fa822aa Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sun, 20 Jul 2025 21:08:40 -0700 Subject: [PATCH] give the Reader API adapter a buffer it needs one or else it always asserts --- lib/std/Io.zig | 4 ++-- src/Package/Fetch.zig | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/std/Io.zig b/lib/std/Io.zig index 2380b3abbf..b27217ece0 100644 --- a/lib/std/Io.zig +++ b/lib/std/Io.zig @@ -314,11 +314,11 @@ pub fn GenericReader( } /// Helper for bridging to the new `Reader` API while upgrading. - pub fn adaptToNewApi(self: *const Self) Adapter { + pub fn adaptToNewApi(self: *const Self, buffer: []u8) Adapter { return .{ .derp_reader = self.*, .new_interface = .{ - .buffer = &.{}, + .buffer = buffer, .vtable = &.{ .stream = Adapter.stream }, .seek = 0, .end = 0, diff --git a/src/Package/Fetch.zig b/src/Package/Fetch.zig index 69fdfb2d9e..5d6819149f 100644 --- a/src/Package/Fetch.zig +++ b/src/Package/Fetch.zig @@ -1205,7 +1205,8 @@ fn unpackResource( const reader = resource.reader(); var br = std.io.bufferedReaderSize(std.crypto.tls.max_ciphertext_record_len, reader); var dcp = std.compress.gzip.decompressor(br.reader()); - var adapter = dcp.reader().adaptToNewApi(); + var adapter_buffer: [1024]u8 = undefined; + var adapter = dcp.reader().adaptToNewApi(&adapter_buffer); return try unpackTarball(f, tmp_directory.handle, &adapter.new_interface); }, .@"tar.xz" => { @@ -1219,7 +1220,8 @@ fn unpackResource( )); }; defer dcp.deinit(); - var adapter = dcp.reader().adaptToNewApi(); + var adapter_buffer: [1024]u8 = undefined; + var adapter = dcp.reader().adaptToNewApi(&adapter_buffer); return try unpackTarball(f, tmp_directory.handle, &adapter.new_interface); }, .@"tar.zst" => { @@ -1230,7 +1232,8 @@ fn unpackResource( var dcp = std.compress.zstd.decompressor(br.reader(), .{ .window_buffer = window_buffer, }); - var adapter = dcp.reader().adaptToNewApi(); + var adapter_buffer: [1024]u8 = undefined; + var adapter = dcp.reader().adaptToNewApi(&adapter_buffer); return try unpackTarball(f, tmp_directory.handle, &adapter.new_interface); }, .git_pack => return unpackGitPack(f, tmp_directory.handle, &resource.git) catch |err| switch (err) {