aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2024-02-13 10:48:10 +0100
committerJakub Konka <kubkon@jakubkonka.com>2024-02-13 10:48:10 +0100
commite5483b4ffc20614463e42741f132a55d58c01880 (patch)
tree4a2f59c14a2c9c84e47fb0ccffc7a1e3556b50da
parent8bd01eb7a914416a772b365dc75d83890067e26c (diff)
downloadzig-e5483b4ffc20614463e42741f132a55d58c01880.tar.gz
zig-e5483b4ffc20614463e42741f132a55d58c01880.zip
elf: fix 32bit build
-rw-r--r--src/link/Elf.zig4
-rw-r--r--src/link/Elf/Object.zig4
2 files changed, 5 insertions, 3 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index 9f8c6c1793..7f421d5d26 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -5903,8 +5903,8 @@ fn fmtDumpState(
}
/// Caller owns the memory.
-pub fn preadAllAlloc(allocator: Allocator, handle: std.fs.File, offset: usize, size: usize) ![]u8 {
- const buffer = try allocator.alloc(u8, size);
+pub fn preadAllAlloc(allocator: Allocator, handle: std.fs.File, offset: u64, size: u64) ![]u8 {
+ const buffer = try allocator.alloc(u8, math.cast(usize, size) orelse return error.Overflow);
errdefer allocator.free(buffer);
const amt = try handle.preadAll(buffer, offset);
if (amt != size) return error.InputOutput;
diff --git a/src/link/Elf/Object.zig b/src/link/Elf/Object.zig
index 92ac64169a..882025ab8c 100644
--- a/src/link/Elf/Object.zig
+++ b/src/link/Elf/Object.zig
@@ -945,7 +945,9 @@ fn preadShdrContentsAlloc(self: Object, allocator: Allocator, handle: std.fs.Fil
assert(index < self.shdrs.items.len);
const offset = if (self.archive) |ar| ar.offset else 0;
const shdr = self.shdrs.items[index];
- return Elf.preadAllAlloc(allocator, handle, offset + shdr.sh_offset, shdr.sh_size);
+ const sh_offset = math.cast(u64, shdr.sh_offset) orelse return error.Overflow;
+ const sh_size = math.cast(u64, shdr.sh_size) orelse return error.Overflow;
+ return Elf.preadAllAlloc(allocator, handle, offset + sh_offset, sh_size);
}
/// Caller owns the memory.