ubsan: undefined shift in mach-o.c

Alan Modra amodra@gmail.com
Sat Nov 6 10:52:30 GMT 2021


This one was logically wrong too.  If file_ptr was 64 bits, then -1U
is extended to 0x00000000ffffffff, probably not what was intended
here.

	* mach-o.c (FILE_ALIGN): Correct expression.

diff --git a/bfd/mach-o.c b/bfd/mach-o.c
index 1f0d4700811..d90ea3c28ce 100644
--- a/bfd/mach-o.c
+++ b/bfd/mach-o.c
@@ -36,7 +36,7 @@
 #define bfd_mach_o_mkobject bfd_mach_o_gen_mkobject
 
 #define FILE_ALIGN(off, algn) \
-  (((off) + ((file_ptr) 1 << (algn)) - 1) & ((file_ptr) -1U << (algn)))
+  (((off) + ((ufile_ptr) 1 << (algn)) - 1) & ((ufile_ptr) -1 << (algn)))
 
 static bool
 bfd_mach_o_read_dyld_content (bfd *abfd, bfd_mach_o_dyld_info_command *cmd);

-- 
Alan Modra
Australia Development Lab, IBM


More information about the Binutils mailing list