diff options
Diffstat (limited to 'src/lib/process.zig')
-rw-r--r-- | src/lib/process.zig | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/lib/process.zig b/src/lib/process.zig index 8aaf972..c167363 100644 --- a/src/lib/process.zig +++ b/src/lib/process.zig @@ -33,6 +33,7 @@ pub const Error = error{ }; pub const ExeError = error{ + TooSmall, BadEndian, BadArch, BadBitLen, @@ -226,8 +227,12 @@ pub fn switchTo(proc: *Info) noreturn { unreachable; } +const HdrBuf = *align(@alignOf(elf.Elf64_Ehdr)) const [@sizeOf(elf.Elf64_Ehdr)]u8; + pub fn create(allocator: std.mem.Allocator, elf_buf: []align(@alignOf(elf.Elf64_Ehdr)) const u8) !*Info { - const hdr_buf: *align(@alignOf(elf.Elf64_Ehdr)) const [@sizeOf(elf.Elf64_Ehdr)]u8 = elf_buf[0..@sizeOf(elf.Elf64_Ehdr)]; + if (elf_buf.len < @sizeOf(elf.Elf64_Ehdr)) return ExeError.TooSmall; + + const hdr_buf: HdrBuf = elf_buf[0..@sizeOf(elf.Elf64_Ehdr)]; const hdr = try elf.Header.parse(@ptrCast(hdr_buf)); try validateElfHeader(hdr, hdr_buf); |