aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthew Lugg <mlugg@mlugg.co.uk>2025-11-20 17:48:35 +0000
committerGitHub <noreply@github.com>2025-11-20 17:48:35 +0000
commit8a73fc8d8ee0065e4d07e473ce6ab095cebfaece (patch)
tree36bed2955666bdfce7b96e2f33c9409bd26f03c1 /src
parenta9568ed2963298864e5c9a92a3eafe81771128ff (diff)
parenta87b5332319b20347916f77e57253e2df4b2a3af (diff)
downloadzig-8a73fc8d8ee0065e4d07e473ce6ab095cebfaece.tar.gz
zig-8a73fc8d8ee0065e4d07e473ce6ab095cebfaece.zip
Merge pull request #25981 from mlugg/macos-fuzz-2
make the fuzzer vaguely work on macOS
Diffstat (limited to 'src')
-rw-r--r--src/link/MachO.zig4
-rw-r--r--src/link/MachO/Dylib.zig7
-rw-r--r--src/link/MachO/Object.zig14
3 files changed, 8 insertions, 17 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig
index 8a3ee07315..7c6708983c 100644
--- a/src/link/MachO.zig
+++ b/src/link/MachO.zig
@@ -4167,7 +4167,7 @@ pub const Platform = struct {
/// Using Apple's ld64 as our blueprint, `min_version` as well as `sdk_version` are set to
/// the extracted minimum platform version.
pub fn fromLoadCommand(lc: macho.LoadCommandIterator.LoadCommand) Platform {
- switch (lc.cmd()) {
+ switch (lc.hdr.cmd) {
.BUILD_VERSION => {
const cmd = lc.cast(macho.build_version_command).?;
return .{
@@ -4200,7 +4200,7 @@ pub const Platform = struct {
// We can't distinguish Mac Catalyst here, but this is legacy stuff anyway.
const cmd = lc.cast(macho.version_min_command).?;
return .{
- .os_tag = switch (lc.cmd()) {
+ .os_tag = switch (lc.hdr.cmd) {
.VERSION_MIN_IPHONEOS => .ios,
.VERSION_MIN_MACOSX => .macos,
.VERSION_MIN_TVOS => .tvos,
diff --git a/src/link/MachO/Dylib.zig b/src/link/MachO/Dylib.zig
index c78d52f815..64817ac433 100644
--- a/src/link/MachO/Dylib.zig
+++ b/src/link/MachO/Dylib.zig
@@ -90,11 +90,8 @@ fn parseBinary(self: *Dylib, macho_file: *MachO) !void {
if (amt != lc_buffer.len) return error.InputOutput;
}
- var it = LoadCommandIterator{
- .ncmds = header.ncmds,
- .buffer = lc_buffer,
- };
- while (it.next()) |cmd| switch (cmd.cmd()) {
+ var it = LoadCommandIterator.init(&header, lc_buffer) catch |err| std.debug.panic("bad dylib: {t}", .{err});
+ while (it.next() catch |err| std.debug.panic("bad dylib: {t}", .{err})) |cmd| switch (cmd.hdr.cmd) {
.ID_DYLIB => {
self.id = try Id.fromLoadCommand(gpa, cmd.cast(macho.dylib_command).?, cmd.getDylibPathName());
},
diff --git a/src/link/MachO/Object.zig b/src/link/MachO/Object.zig
index 7cec09ba91..5f28d3dfda 100644
--- a/src/link/MachO/Object.zig
+++ b/src/link/MachO/Object.zig
@@ -109,11 +109,8 @@ pub fn parse(self: *Object, macho_file: *MachO) !void {
if (amt != self.header.?.sizeofcmds) return error.InputOutput;
}
- var it = LoadCommandIterator{
- .ncmds = self.header.?.ncmds,
- .buffer = lc_buffer,
- };
- while (it.next()) |lc| switch (lc.cmd()) {
+ var it = LoadCommandIterator.init(&self.header.?, lc_buffer) catch |err| std.debug.panic("bad object: {t}", .{err});
+ while (it.next() catch |err| std.debug.panic("bad object: {t}", .{err})) |lc| switch (lc.hdr.cmd) {
.SEGMENT_64 => {
const sections = lc.getSections();
try self.sections.ensureUnusedCapacity(gpa, sections.len);
@@ -1644,11 +1641,8 @@ pub fn parseAr(self: *Object, macho_file: *MachO) !void {
if (amt != self.header.?.sizeofcmds) return error.InputOutput;
}
- var it = LoadCommandIterator{
- .ncmds = self.header.?.ncmds,
- .buffer = lc_buffer,
- };
- while (it.next()) |lc| switch (lc.cmd()) {
+ var it = LoadCommandIterator.init(&self.header.?, lc_buffer) catch |err| std.debug.panic("bad object: {t}", .{err});
+ while (it.next() catch |err| std.debug.panic("bad object: {t}", .{err})) |lc| switch (lc.hdr.cmd) {
.SYMTAB => {
const cmd = lc.cast(macho.symtab_command).?;
try self.strtab.resize(gpa, cmd.strsize);