| author | |
| committer | |
| log | 1c2e65fe1de66e8ebb8953a67fe327bae3251f30 |
| tree | 5a56eecdda9296efaa9fb49d681aea7d5815092d |
| parent | 488df7f1d1f7300bfb23134cc79fed2cef917ae2 |
The buffer index was declared as `u64`, which overflows `usize` on a
32-bit target.
The following example program failed to compile for 32-bit targets:
```zig
const std = @import("std");
pub fn main() !void {
const alloc = std.testing.allocator;
const file = std.io.getStdIn();
_ = try std.elf.readAllHeaders(alloc, file);
}
```
```
lib/zig/std/elf.zig:543:36: error: expected type 'usize', found 'u64'
const len = file.pread(buf[i .. buf.len - i], offset + i) catch |err| switch (err) {
^
lib/zig/std/elf.zig:543:36: note: unsigned 32-bit int cannot represent all possible unsigned 64-bit values
const len = file.pread(buf[i .. buf.len - i], offset + i) catch |err| switch (err) {
^
lib/zig/std/elf.zig:543:35: note: referenced here
const len = file.pread(buf[i .. buf.len - i], offset + i) catch |err| switch (err) {
^
lib/zig/std/elf.zig:348:5: note: referenced here
try preadNoEof(file, &hdr_buf, 0);
^
lib/zig/std/elf.zig:392:19: note: referenced here
.header = try readHeader(file),
```1 files changed, 1 insertions(+), 1 deletions(-)
lib/std/elf.zig+1-1| ... | ... | @@ -538,7 +538,7 @@ pub fn int32(need_bswap: bool, int_32: anytype, comptime Int64: anytype) Int64 { |
| 538 | 538 | } |
| 539 | 539 | |
| 540 | 540 | fn preadNoEof(file: std.fs.File, buf: []u8, offset: u64) !void { |
| 541 | var i: u64 = 0; | |
| 541 | var i: usize = 0; | |
| 542 | 542 | while (i < buf.len) { |
| 543 | 543 | const len = file.pread(buf[i .. buf.len - i], offset + i) catch |err| switch (err) { |
| 544 | 544 | error.SystemResources => return error.SystemResources, |