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...@@ -1306,15 +1306,15 @@ fn initResource(f: *Fetch, uri: std.Uri, resource: *Resource, reader_buffer: []u
1306 return error.FetchFailed;1306 return error.FetchFailed;
1307 }1307 }
13081308
1309 var want_oid_buf: [git.Oid.max_formatted_length]u8 = undefined;1309 var want_oid_hex_buf: [git.Oid.max_formatted_length]u8 = undefined;
1310 _ = std.fmt.bufPrint(&want_oid_buf, "{f}", .{want_oid}) catch unreachable;1310 const want_oid_hex = std.mem.print(&want_oid_hex_buf, "{f}", .{want_oid}) catch unreachable;
1311 resource.* = .{ .git = .{1311 resource.* = .{ .git = .{
1312 .session = session,1312 .session = session,
1313 .fetch_stream = undefined,1313 .fetch_stream = undefined,
1314 .want_oid = want_oid,1314 .want_oid = want_oid,
1315 } };1315 } };
1316 const fetch_stream = &resource.git.fetch_stream;1316 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| {
1318 return f.fail(f.location_tok, try eb.printString("unable to create fetch stream: {t}", .{err}));1318 return f.fail(f.location_tok, try eb.printString("unable to create fetch stream: {t}", .{err}));
1319 };1319 };
1320 errdefer fetch_stream.deinit(fetch_stream);1320 errdefer fetch_stream.deinit(fetch_stream);