| ... | @@ -138,7 +138,7 @@ pub fn parseHeader( | ... | @@ -138,7 +138,7 @@ pub fn parseHeader( |
| 138 | | 138 | |
| 139 | const dynamic_table: []elf.Elf64_Dyn = if (dynamic_sect_index) |index| dt: { | 139 | const dynamic_table: []elf.Elf64_Dyn = if (dynamic_sect_index) |index| dt: { |
| 140 | const shdr = sections[index]; | 140 | const shdr = sections[index]; |
| 141 | const n = shdr.sh_size / @sizeOf(elf.Elf64_Dyn); | 141 | const n = std.math.cast(usize, shdr.sh_size / @sizeOf(elf.Elf64_Dyn)) orelse return error.Overflow; |
| 142 | const dynamic_table = try gpa.alloc(elf.Elf64_Dyn, n); | 142 | const dynamic_table = try gpa.alloc(elf.Elf64_Dyn, n); |
| 143 | errdefer gpa.free(dynamic_table); | 143 | errdefer gpa.free(dynamic_table); |
| 144 | const buf = mem.sliceAsBytes(dynamic_table); | 144 | const buf = mem.sliceAsBytes(dynamic_table); |
| ... | @@ -155,7 +155,8 @@ pub fn parseHeader( | ... | @@ -155,7 +155,8 @@ pub fn parseHeader( |
| 155 | const dynsym_shdr = sections[index]; | 155 | const dynsym_shdr = sections[index]; |
| 156 | if (dynsym_shdr.sh_link >= sections.len) return error.BadStringTableIndex; | 156 | if (dynsym_shdr.sh_link >= sections.len) return error.BadStringTableIndex; |
| 157 | const strtab_shdr = sections[dynsym_shdr.sh_link]; | 157 | const strtab_shdr = sections[dynsym_shdr.sh_link]; |
| 158 | const buf = try strtab.addManyAsSlice(gpa, strtab_shdr.sh_size); | 158 | const n = std.math.cast(usize, strtab_shdr.sh_size) orelse return error.Overflow; |
| | 159 | const buf = try strtab.addManyAsSlice(gpa, n); |
| 159 | const amt = try fs_file.preadAll(buf, strtab_shdr.sh_offset); | 160 | const amt = try fs_file.preadAll(buf, strtab_shdr.sh_offset); |
| 160 | if (amt != buf.len) return error.UnexpectedEndOfFile; | 161 | if (amt != buf.len) return error.UnexpectedEndOfFile; |
| 161 | } | 162 | } |
| ... | @@ -194,7 +195,7 @@ pub fn parse( | ... | @@ -194,7 +195,7 @@ pub fn parse( |
| 194 | ) !Parsed { | 195 | ) !Parsed { |
| 195 | const symtab = if (header.dynsym_sect_index) |index| st: { | 196 | const symtab = if (header.dynsym_sect_index) |index| st: { |
| 196 | const shdr = header.sections[index]; | 197 | const shdr = header.sections[index]; |
| 197 | const n = shdr.sh_size / @sizeOf(elf.Elf64_Sym); | 198 | const n = std.math.cast(usize, shdr.sh_size / @sizeOf(elf.Elf64_Sym)) orelse return error.Overflow; |
| 198 | const symtab = try gpa.alloc(elf.Elf64_Sym, n); | 199 | const symtab = try gpa.alloc(elf.Elf64_Sym, n); |
| 199 | errdefer gpa.free(symtab); | 200 | errdefer gpa.free(symtab); |
| 200 | const buf = mem.sliceAsBytes(symtab); | 201 | const buf = mem.sliceAsBytes(symtab); |