authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2021-01-19 19:04:01+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2021-01-19 22:39:49+01:00
log5d4401ceec60bb9865569e359f923a16657a7304
tree9aa9b0a1b1b638296dac67732b69528df125a6fe
parente726868b020f2dc8b731b7b2ddee1616478cfac8

macho: fix overflowing u64 range


1 files changed, 7 insertions(+), 2 deletions(-)

src/link/MachO.zig+7-2
......@@ -2153,8 +2153,13 @@ fn allocateTextBlock(self: *MachO, text_block: *TextBlock, new_block_size: u64,
21532153 // Is it enough that we could fit this new text block?
21542154 const sym = self.local_symbols.items[big_block.local_sym_index];
21552155 const capacity = big_block.capacity(self.*);
2156 const ideal_capacity = capacity * alloc_num / alloc_den;
2157 const ideal_capacity_end_vaddr = sym.n_value + ideal_capacity;
2156 const ideal_capacity_end_vaddr: u64 = ideal_cap: {
2157 if (math.mul(u64, @divTrunc(capacity, alloc_den), alloc_num)) |cap| {
2158 break :ideal_cap math.add(u64, sym.n_value, cap) catch math.maxInt(u64);
2159 } else |_| {
2160 break :ideal_cap math.maxInt(u64);
2161 }
2162 };
21582163 const capacity_end_vaddr = sym.n_value + capacity;
21592164 const new_start_vaddr_unaligned = capacity_end_vaddr - new_block_ideal_capacity;
21602165 const new_start_vaddr = mem.alignBackwardGeneric(u64, new_start_vaddr_unaligned, alignment);