authorgravatar for dkareh@noreply.codeberg.orgDaniel Kareh <dkareh@noreply.codeberg.org> 2026-08-27 01:14:44-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-08-27 21:27:18+02:00
logd2317110c071d7aff79cc54c0d1ce9907149e4c8
tree18390bc45358fb14c61124d5a26833394a99c4ca
parent4c9cdc8b9189d548f00229cdfc21f1850348026f

Maker.Fetch: don't pass a partially uninitialized slice to `session.fetch`

This bug was present since `zig fetch` gained support for SHA-256 Git repositories. It looks like many Git servers tolerate overlong OIDs, but not Google's server (used at https://*.googlesource.com/). Closes #36656.

1 files changed, 3 insertions(+), 3 deletions(-)

lib/compiler/Maker/Fetch.zig+3-3
......@@ -1306,15 +1306,15 @@ fn initResource(f: *Fetch, uri: std.Uri, resource: *Resource, reader_buffer: []u
13061306 return error.FetchFailed;
13071307 }
13081308
1309 var want_oid_buf: [git.Oid.max_formatted_length]u8 = undefined;
1310 _ = std.fmt.bufPrint(&want_oid_buf, "{f}", .{want_oid}) catch unreachable;
1309 var want_oid_hex_buf: [git.Oid.max_formatted_length]u8 = undefined;
1310 const want_oid_hex = std.mem.print(&want_oid_hex_buf, "{f}", .{want_oid}) catch unreachable;
13111311 resource.* = .{ .git = .{
13121312 .session = session,
13131313 .fetch_stream = undefined,
13141314 .want_oid = want_oid,
13151315 } };
13161316 const fetch_stream = &resource.git.fetch_stream;
1317 session.fetch(fetch_stream, &.{&want_oid_buf}, reader_buffer) catch |err| {
1317 session.fetch(fetch_stream, &.{want_oid_hex}, reader_buffer) catch |err| {
13181318 return f.fail(f.location_tok, try eb.printString("unable to create fetch stream: {t}", .{err}));
13191319 };
13201320 errdefer fetch_stream.deinit(fetch_stream);