From 0bdbd1fa4871d8895a1056b63a8710e6dbfaccbd Mon Sep 17 00:00:00 2001 From: Iain Sandoe Date: Tue, 24 Feb 2026 11:44:27 +0000 Subject: [PATCH] libiberty, Darwin: Fix handling of file offsets. In the case where a Mach-O object is embedded inside some container (e.g. an archive) we must account the offset from the start of that container when reading. In most cases, this has been done correctly. However, we were missing the case for reading segment data. This only showed up once we tried using archives (since regular Mach-O objects start at the begining of the file). Fixed thus. libiberty/ChangeLog: * simple-object-mach-o.c (simple_object_mach_o_segment): Account for the offset of this Mach-O object from the start of any container. Signed-off-by: Iain Sandoe --- libiberty/simple-object-mach-o.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libiberty/simple-object-mach-o.c b/libiberty/simple-object-mach-o.c index 3e81d6f908a..0897a3edf7d 100644 --- a/libiberty/simple-object-mach-o.c +++ b/libiberty/simple-object-mach-o.c @@ -464,7 +464,8 @@ simple_object_mach_o_segment (simple_object_read *sobj, off_t offset, /* Fetch the section headers from the segment command. */ secdata = XNEWVEC (unsigned char, nsects * sechdrsize); - if (!simple_object_internal_read (sobj->descriptor, offset + seghdrsize, + if (!simple_object_internal_read (sobj->descriptor, + sobj->offset + offset + seghdrsize, secdata, nsects * sechdrsize, errmsg, err)) { XDELETEVEC (secdata);