Skip to content

Commit 43eb9b5

Browse files
castholmsqueek502
authored andcommitted
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.
1 parent 38d4440 commit 43eb9b5

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

src/link/Elf/Archive.zig

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ pub fn setArHdr(opts: struct {
118118
.ar_fmag = undefined,
119119
};
120120
@memset(mem.asBytes(&hdr), 0x20);
121-
@memcpy(&hdr.ar_fmag, elf.ARFMAG);
122121

123122
{
124123
var writer: std.Io.Writer = .fixed(&hdr.ar_name);
@@ -129,10 +128,15 @@ pub fn setArHdr(opts: struct {
129128
.name_off => |x| writer.print("/{d}", .{x}) catch unreachable,
130129
}
131130
}
131+
hdr.ar_date[0] = '0';
132+
hdr.ar_uid[0] = '0';
133+
hdr.ar_gid[0] = '0';
134+
hdr.ar_mode[0] = '0';
132135
{
133136
var writer: std.Io.Writer = .fixed(&hdr.ar_size);
134137
writer.print("{d}", .{opts.size}) catch unreachable;
135138
}
139+
hdr.ar_fmag = elf.ARFMAG.*;
136140

137141
return hdr;
138142
}

0 commit comments

Comments
 (0)