commit 43eb9b52ccac894023800115e8395cdb413be14a (tree)
parent 38d44404a589590e0443444f2206d7e9859b09fe
Author: Carl Ã…stholm <carl@astholm.se>
Date: Wed, 5 Nov 2025 16:34:07 +0100
link.Elf: Ensure archive header fields are not left blank
ld.lld fails with "truncated or malformed archive" errors when reading
archive header field values that are not valid numbers.
Diffstat:
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/link/Elf/Archive.zig b/src/link/Elf/Archive.zig
@@ -118,7 +118,6 @@ pub fn setArHdr(opts: struct {
.ar_fmag = undefined,
};
@memset(mem.asBytes(&hdr), 0x20);
- @memcpy(&hdr.ar_fmag, elf.ARFMAG);
{
var writer: std.Io.Writer = .fixed(&hdr.ar_name);
@@ -129,10 +128,15 @@ pub fn setArHdr(opts: struct {
.name_off => |x| writer.print("/{d}", .{x}) catch unreachable,
}
}
+ hdr.ar_date[0] = '0';
+ hdr.ar_uid[0] = '0';
+ hdr.ar_gid[0] = '0';
+ hdr.ar_mode[0] = '0';
{
var writer: std.Io.Writer = .fixed(&hdr.ar_size);
writer.print("{d}", .{opts.size}) catch unreachable;
}
+ hdr.ar_fmag = elf.ARFMAG.*;
return hdr;
}